-
Notifications
You must be signed in to change notification settings - Fork 30
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
packageでの管理方法 #31
Comments
packge.elだとそんな感じにしかならないと思います。 ただ package.elだと古いものでもインストールしていると判定されているため、 極力最新のものを使って合わせるということで、 |
僕の場合は、最初のうちはインストールするもののリストを列挙する方法でやっていたのですが、package.elだけでなくel-getも使うことになってしまったので、いまではel-getに一本化しています。 ただ、el-getを公式の使い方通りに使うと、パッケージをインストールするための指定( |
@syohex @tarao 個人的にはpackage.elだと一覧を適当に見て新しいものを探したりするのが気軽にできるのが良いかなと思っています。 ちなみに最初に示したコードに近いパッケージとして save-packages がありました。 |
@sabottenda cartonはどうなんですかね ? あくまでパッケージレベルでの依存関係の解決という |
@syohex rubyのbundlerみたいなものだとすると割とありなのかなと思いました。必要なパッケージを指定するとそれに依存するものも自動で入るような。 |
@sabottenda bundler自体よくわかっていないんですが、あの手のやつのいいところは |
Carton のラッパーで https://github.com/rdallasgray/pallet みたいなものもあるみたいです。使ったことないですがインストール済みパッケージを Carton ファイルに自動的に dump してくれるみたいですね。 |
なるほど、みなさんいろいろ考えられているんですね。 |
どうでもいいかもしれないですが、Cartonの問題は Perlの bundler的なものの名前も Perl版の方が数年早く作られているし、なんとかならなかったのかとは思いますね。 |
cartonってどこかで見た気がすると思ったら、そういうことでしたか。 |
以下は単純過ぎるまとめですが、現状何を使うにしても一長一短があると package.elメリット
デメリット
el-getメリット
デメリット
|
そうですね。closeするタイミングが難しいと思っていたところなのでまとめて終わりにしたいですね。 |
ちょっと知ってることだけフォローしてみます。 el-get はいくつかの backend があります。多分一般的な印象だと git repository から直接インストール、みたいな感じかもしれませんが、 package.el もひとつの backend です[1]。デフォルトだと el-get をインストールしたら marmalade からもダウンロード可能な状態になるなど、その辺よしなにやってくれるはずです。なので、 el-get vs package.el な視点は、 el-get が package.el を内包している時点で違う気がするなあと感じます。だから、正確に区分すると el-get も package.el のラッパー(と他の機能多数)と言えると思います。まあ el-get の UI だけ見ると backend は見えないので意味のある言及かは分かりませんが。 [1] 他に emacswiki、VCS色々、システムのパッケージマネージャ(apt-get/pacman)など。 |
参考になります。より高度に使いたい場合は el-getという視点がいいですかね。 |
私が調べてみた感じだと、el-getはWindows上での使用に問題があるようです。インストールに苦労している情報をよく見ます。パッケージマネージャは基本的にどこでも動作するのが理想ですが……。 |
@tkf |
@Shougo 作者曰く windows は first class citizen だそうなので windows を蔑ろにしてるわけじゃないはずですが、多分 dev の中に windows user がいないんでしょうね。。。 windows 周りのバグの修正は遅いです。 @sabottenda 見たこと無かったですが、 |
ふーむ。それは残念ですね。 |
@tkf なるほど。 そうなると確かに上位互換みたいになりますね。 ひとまず今まで出た情報から特徴をまとめてみました。 auto-install
package.el
el-get
carton
bundle.el
|
@sabottenda 勝手に更新しました. package.el
el-get
|
これは、パッケージのバージョン構成も再現出来るかどうかも考えていますか? package.el がその辺りサポートしているのかどうか気になります。 melpa から開発版を落とした場合は、サーバーに過去すべてのスナップショットがあるとは考えられないので無理でしょうが、 ELPA/Marmalade に登録されているものはどうなんでしょう。 ちなみに、 el-get は VCS 系の backend ならリビジョン単位で再現可能です。 emacswiki などからファイルをそのままダウンロードする場合でも、チェックサムを記録しておいてそれと違うものがダウンロードされた場合は通知するみたいなことも出来ます。 el-getの特徴として「外部ツールのインストールが出来る」もあった方が良いかもしれません。これは「インストール前後に任意の処理を追加できる」ことに含まれるのですが、Emacsが他のプログラミング言語で書かれたツールと連携することが多いことを考えると特筆したほうが良いように思えます。例えば、 el-get に登録してある Python のツールは依存モジュールのインストールとパスの設定が自動で済むようになっています。 あと、 el-get も 4.1 (最新のリリース) から、 (el-get がロード出来ていれば) 設定ファイルを弄らなくもパッケージのインストールが出来るようになっています。この機能が package.el と比較してどこまで安定しているかどうかはちょっと良く分かりません。 el-getの便利機能はパッケージ管理からはみ出すのも含めるともっと色々あります。パッケージ事に init ファイルを分けられたり、それを自動でコンパイル出来たり、遅延読み込み出来たり...。 @myuhe さん曰く、 package.el の利点 (というか el-get の欠点) として、proxy関係でVCSサーバーに上手く繋げない場合でも使える、というものもあるようです。 |
呼ばれた気がしたので、ちょこっと書いてみます。
ELPAについては知りませんが、Marmaladeはサーバ側にバージョンごとのキャッシュ ただ、package.elからバージョン管理ができるようなものではなく、Marmaladeに package.elについて言えば、ローカルにあるものは前のバージョンを残すという
私もこれがel-getの最大のアドバンテージだと思っています。package.elだとこ
package.elもautoloadのマジックコメントが正しくついていれば、設定ファイル
これと、@Shougo さんの言われていたWindowsへの対応がel-getの欠点だと思っ 私もmakeinfoなどの外部ツールが必要なパッケージだけをel-getでしばらく管理 一方、package.elだとHTTPだけ話せればどうにかなるので、そのあたりがとても それと、VCSの利用がほぼ前提にあるel-getの場合、Windowsでの利用で問題が起 それと、el-getは複数のアップデートをかけると、いろんなとこのサーバに接続 その点、package.elだとせいぜい二つくらいのサーバにアクセスするだけなので こんな理由もありまして、手元でのバージョン管理はメインをpackage.el、外部 こういった類のものを選択する理由は個々人の環境それぞれで違ってくるでしょ |
@tkf どこまで需要があるかは別として、理想的にはバージョン指定で再現できると良いですね。 あれこれ考えてるうちに @myuhe さんが丁寧に回答して頂いていますね。ありがとうございます。 package.elは発展途中で機能としては足りない部分もあるが、公式パッケージでシンプルということで扱いやすいというのがありそうですね。 改善次第でどうなるかわからないですが、現状ではパッケージ管理といえばコレ!という決定はできないようなので各パッケージのpros/consをまとめておきたいですね。 まとめると追加でこのような感じでしょうか。 package.el
el-get
|
外部ツールと読んでいいかわからないですが、MELPAについては、同一リポジトリに |
@syohex なるほど。だとすると大抵の場合はその方法で問題無さそうですね。 |
el-getの利点を正確に表わすなら、外部ツールをインストールして実行できるところですかね。 |
@sabottenda ぼちぼちまとまってきたので今までの内容をまとめたものを、ページとしてを作成して リンクをどう貼るかは後でもいいので、ページを作成して pull requestしてください。 お手数をお掛けしますが、よろしくお願いします。 |
@syohex さんのおっしゃるとおり、 package.el の形式は別に elisp 以外のファイルも含めることが出来て、 info ファイルを含めているパッケージとか結構あるみたいです。 なので、 elisp 以外のものも mermalade とかで含めるようにしておいて、 el-get でその外部ファイルの処理をする、みたいなことが出来れば、 proxy や VCS 依存の問題はすべて無くせて、 el-get の利点も受けられるだろうな、と思っています。 大量にレシピを書き換える必要がありますが...。
例えば、現時点で最新が 2.3 のパッケージの 2.2 をインストール、みたいなことって出来るのかな、って思いました。 |
@tkf |
@myuhe ローカルに何もない状態(例えば ~/.emacs.d が空)で、って意味でした。 |
@tkf そういう場合だと無理です。package.elにはサーバ側のバージョンを指定する機能はなかったはずです。強引に実現しようとすれば、サーバ側に違うパッケージ名で登録しないといけないんだと思います。 |
@myuhe なるほど。この辺り、どのくらいで改善してくれるんですかね。。。ローカルで、自分の使うパッケージすべてのバージョンを指定した |
バージョンの話をしていたら見逃した package.el の利点を思い出しました。 el-get はパッケージのバージョンについて何も知ることが出来ないので、down streamのパッケージが依存パッケージの最低バージョンを変更した時に、その依存パッケージも同時に update するみたいなことが出来ません。 package.el だとこの欠点は出てこないですね。 MELPA 使っちゃうと意味なくなりますが。 |
@tkf 込みいってくるとEmacs上のバージョン管理にはまだまだ穴がありますね。サーバ側で改善すべきことが多くあって個人の力ではなかなか動かしようがないところでもあり、改善のスピードはあまり早くないんではないかと思っています。 |
興味があったのでEmacs cartonを調べてみました。コマンドラインから使用するみたいなのでWindowsでの使用には何がありそうです(動作しない?)。cartonは依存関係の抽出に重きを置いているようですね。 ※:実装を見てみるとbashスクリプトだった。Windows 対応が壊滅的……。 |
carton の実装は emacs lisp モジュールを bash でラップ、みたいな感じです。ユーザーの emacs 設定を管理する場合は emacs lisp モジュールを直接ロードすると思うんで、 windows でも使えるんじゃないですかね。 carton で設定を管理をしたこと無いから想像ですが。 |
ふむふむ。Emacs Lispから使うためのインタフェースがあるならその部分だけは使えそうですね。 |
packageを使っている時に同じ環境を再構築したい場合はどのように管理しているでしょうか?
1つはpackageでインストールしたパッケージもgitなどで管理するというのもありますが、できればpackageでいれたものはVCSには入れたくないと思っています。
https://gist.github.com/sabottenda/5011883
今はpackageでインストールするもののリストを列挙しておいて、init-loaderで最初にインストールされてないものをチェックするようにしています。
他にスマートな方法があれば教えて頂きたいです。
The text was updated successfully, but these errors were encountered: