2012-01-16 5 views
17

pip requirements fileを使用して、自分のプロジェクトの依存関係のリストを維持します。ピップフリーズで作成された要件ファイルにピップインストールオプションを維持する方法は?

は、私は今、自分自身が、私は私のプロジェクトのrequirements.txtに保存し、その出力でこれらのオプションを記録しませんpip install --install-option='some-setup.py.option'が、pip freezeを使用してライブラリをインストールする必要が見つけます。新しいマシン上のシンプルなpip install -r requirements.txtは、この1つのライブラリに必要な引数を指定せずにすべての依存関係をインストールし、単純なラウンドトリップ操作を失ったため、問題が発生します。

だから、私の2パートの質問です:

  • は何とかピップフリーズ出力のオプションをインストールピップを維持する方法はありますか?
  • もしそうでなければ、要件ファイルを手動でハックしてインストールオプションを追加する方法がありますか?私はpip freezeの往復の性質を失うことで大丈夫です。必要な場合は、要件ファイルの手動メンテナンスに切り替える必要があります。 documentationを確認しましたが、何も手助けできませんでした。

不要ますが、おそらく興味深い詳細は、私がpymongoけどwithout building the C extensionので、私はeventletベースのアプリケーションで非同期にそれを使用することができますをインストールしたい

に従ってください。

することは、必要に応じてインストールしてrequirements.txtを構築:新しいvirtualenvので

(test)[email protected]:~/test$ pip install pymongo --install-option='--no_ext' 
Downloading/unpacking pymongo 
    Downloading pymongo-2.1.1.tar.gz (199Kb): 199Kb downloaded 
    Running setup.py egg_info for package pymongo 
Installing collected packages: pymongo 
    Running setup.py install for pymongo 
Successfully installed pymongo 
Cleaning up... 
(test)[email protected]:~/test$ pip freeze > requirements.txt 
(test)[email protected]:~/test$ cat requirements.txt 
bottle==0.10.7 
distribute==0.6.10 
eventlet==0.9.16 
greenlet==0.3.3 
lxml==2.3.3 
pymongo==2.1.1 
simplejson==2.3.2 
wsgiref==0.1.2 

requirements.txtから同じプロジェクトをインストールしてみてください。ピップは

(test2)[email protected]:~/test2$ pip install -r requirements.txt 
... 
Downloading/unpacking pymongo==2.1.1 (from -r requirements.txt (line 6)) 
    Downloading pymongo-2.1.1.tar.gz (199Kb): 199Kb downloaded 
    Running setup.py egg_info for package pymongo 
Installing collected packages: pymongo 
    Running setup.py install for pymongo 
    building 'bson._cbson' extension 
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Ibson -I/usr/include/python2.6 -c bson/_cbsonmodule.c -o build/temp.linux-i686-2.6/bson/_cbsonmodule.o 
... 
Successfully installed pymongo 
Cleaning up... 

更新 Issue 271ごとのライン--install-option requirements.txtに指定することを求めて2011年4月にピップに対して開かれたpymongo :(のためのC拡張を構築します。同じ問題がある場合は、問題に投票してください。

+0

--install-option = ' - no_ext'を要件ファイルに手動で追加した場合、動作しますか? - そうでない場合は、pip開発者にこの機能を追加するようにリクエストする必要があると思われます(これは素晴らしいアイデアです)。 – d3vid

+2

@ d3vidそれはうまくいきません。 2011年4月に開設された機能要求は既にあります:https://github.com/pypa/pip/issues/271。あなたの+1もそこに追加してください。 – Day

答えて

12

バージョン7.0(リリース番号2015-05-21)以降、pipには、要件ファイルから--install-option--global-optionを解析する機能があります。今あなたのrequirements.txtに以下の行を持つことが可能でなければなりません:

pymongo==2.1.1 --install-option='--no_ext' 

詳しい情報はherehereを見つけることができます。

+1

Plzはhttps://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40への最初のリンクを修正します – y0prst

+0

これはどのバージョンですか? – hlin117

+0

@ hlin117は、[最初のリンク](https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40)に従ってバージョン7.0以降になります。 – Day

5

これはおそらくあまりにも純粋ではないかもしれませんが、要件と対応するオプションを手動で管理するのがうまくいけば、ピップの呪文全体を含む小さなシェルスクリプトとして保守してください。機能リクエストが聴けるまで回避するだけです:)

+1

それは間違いなくそのトリックを行います。 – Day

+0

私は同じ問題を抱えていますが、私はこれを思いつかなかったためにちょっと馬鹿だと感じています。この提案を投稿していただきありがとうございます! – kungphu

+0

は 'requirements.txt'という慣習を破ります。これは、例えばhttp://docs.saltstack.com/en/latest/ref/states/all/salt.states.pip_state.html#saltのように物事を崩壊させるためです。 .states.pip_state.installed。しかし、ええ、それは明らかに何がここで必要になるでしょう。 – Andrew

関連する問題