私はfabric(0.9.4)+ pip(0.8.2)を使用していて、複数のサーバーにいくつかのpythonモジュールをインストールする必要があります。すべてのサーバーに古いバージョンのsetuptools(0.6c8)がインストールされていますpymongoモジュール用にアップグレードする必要があります。Pymongoにはsetuptools> = 0.6c9が必要です。
私の問題は、pipがsetuptoolsではなくpymongoでインストールを開始するため、pipが停止することです。要件ファイルでモジュールの順序を入れ替えても効果がないようです。
requirements.txt:
setuptools>=0.6c9
pymongo==1.9
simplejson==2.1.3
それ自体では適切に実行されていないように見えるため、pipのインストール順序を指定する方法はありますか?
これは2つの個別の要件ファイルで解決できますが、現在または将来複数の要件ファイルを維持する必要がなかったとしたら、すばらしいでしょう。
Pip 0.8.3でも問題が解決しない。
これはばかげたハックですが、うまくいくかもしれません。要件ファイルから1行ずつ読み取り、その上でpipコマンドを実行するbashスクリプトを記述します。
#!/bin/bash
for line in $(cat requirements.txt)
do
pip install $line -E /path/to/virtualenv
done
あなたはただ使うことができます:
cat requirements.txt | xargs pip install
Requirements.txt内のすべてのタイプのエントリ(たとえば、gitリポジトリからのパッケージ)を許可するには、次の一連のコマンドを使用する必要があります。
cat requirements.txt | xargs -n 1 -L 1 pip install
-n 1および-L 1パッケージは、パッケージを1つずつインストールし、requirements.txtファイルのすべての行を個別のアイテムとして扱うために必要です。
残念ながら、アップグレードの提案は機能しません。 https://github.com/pypa/pip/issues/24 でその他の詳細を読むと、その理由がわかります
pipは、インストールを試みる前に、まずすべてのパッケージをビルドします。したがって、次のような要件ファイルがあります
numpy==1.7.1
scipy==0.13.2
statsmodels==0.5.0
Statsmodelsのビルドは次のステートメントで失敗します
ImportError: statsmodels requires numpy
(シェルスクリプトを介して)要件ファイルの各エントリに対して手動でpipを呼び出すための回避策は、現在の唯一の解決策のようです。
Pymongoにはsetuptools> = 0.6c9が必要です
どうして知っていますか?ビルドまたはインストールする必要がありますか?インストールしようとしたPymongoのバージョンは何も言っていませんが、現在の(3.2.2)バージョンのsetup.py
ファイルを見ると、Pymongoがsetup.py
(setup_requires
)を実行するために必要なものも、インストールに必要なもの(install_requires
)も指定されていません。 。そのような情報がないと、pipは特定のバージョンのsetuptoolsを保証できません。 Pymongoがsetup.py
を実行するために特定のバージョンのsetuptoolsを必要とする場合(setup
関数自体を実行するためにsetuptoolsを必要とするのではなく)、他の問題は最近までこれを指定する方法がなかったことです。今仕様があります–PEP 518 – Python Projectsの最小ビルドシステム要件の指定、これはpipですぐに実装する必要があります– Implement PEP 518 support#3691 。
インストールの順序に関しては、これはpip 6.1.0で修正されました。
からpip install – Installation Ordersection of pip's documentation:
V6.1.0以降、pipは依存関係を依存関係の前に、つまり「トポロジカルな順序」でインストールします。これは、注文に関連して現在行われている唯一のコミットメントピップです。
以降:
V6.1.0より前のバージョンでは、pipはインストール順序について何の責任も負いませんでした。
ただし、Pymongoによる要件の適切な仕様なしでは、それも役に立ちません。
要件ファイルにコメントがある場合は、使用する必要があります。
grep -v "^#" requirements.txt | xargs pip install
@lukasrmsの解決策に続いて、pipに要件を一度に1つずつインストールするために、これを実行する必要がありました。
cat requirements.txt | xargs -n 1 pip install
「pip -E」を使用する代わりに、virtualenv内でpipを実行することになりました。-Epipを使用すると、サーバーのサイトパッケージが引き続き表示され、インストールの一部が明らかに失敗したためです。
Virtualenvのないサーバーでも問題が発生しました。別のpipコマンドでsetuptoolsをインストールしても、pymongoはインストールを拒否します。
これは、pipとsetuptoolsの間の問題のように見えるため、easy_installを使用してsetuptoolsを個別にインストールすることで解決しました。
fabfile.pyのスニペット:
env.activate = "source %s/bin/activate" % virtualenv_path
_virtualenv("easy_install -U setuptools")
_virtualenv("pip install -r requirements.txt")
def _virtualenv(command)
if env.virtualenv:
Sudo(env.activate + "&&" + command)
else:
Sudo(command)
私はピップ0.8.3と0.8.2でこれらの問題がありました。
申し訳ありませんが、setuptools> = 0.6c9を使用していたため、最初の答えは間違っていました。
Pymongoのsetup.pyにはsetuptools> = 0.6c9が必要ですが、pipはsetuptools> = 0.6c9しかダウンロードしておらず、まだインストールされていないため、不可能です。
私が以前指摘した問題で誰かがそれについて議論しました。
数週間前に自分で問題を作成しました: 以前のパッケージをインストールする前に、要件リストの各パッケージに対してEgg_info
を実行しないでください 。
騒々しいため申し訳ありません。
最初の答え:
ピップを0.8.3バージョンにアップグレードします。これには バグ修正のインストール順序 があります。
今、あなたがすべてをアップグレードすればうまくいきます:-)
ここでニュースを確認してください: http://www.pip-installer.org/en/0.8.3/news.html