Python Pipのインストール注文を指定する方法は?
-
28-10-2019 - |
質問
私はファブリック(0.9.4)+PIP(0.8.2)を使用しています。複数のサーバーにPythonモジュールをインストールする必要があります。すべてのサーバーには、Pymongoモジュールのアップグレードが必要な古いバージョンのSetuptools(0.6C8)があります。 Pymongoにはsetuptools> = 0.6c9が必要です。
私の問題は、PIPがPIPを停止するのではなく、Pymongoでのインストールを開始することです。要件ファイルのシャッフルモジュール注文は役に立たないようです。
recumportion.txt:
setuptools>=0.6c9
pymongo==1.9
simplejson==2.1.3
PIPのインストール注文を指定する方法はありますか?
これは2つの個別の要件ファイルで解決できますが、複数の要件ファイルを現在または将来維持する必要がない場合は素晴らしいことです。
PIP 0.8.3で問題が持続します。
解決
これは愚かなハックですが、ただ機能するかもしれません。要件ファイルから読み取り、行ごとに読み取り、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
要件であらゆる種類のエントリ(gitリポジトリからのパッケージなど)を許可するには、次のコマンドセットを使用する必要があります
cat requirements.txt | xargs -n 1 -L 1 pip install
-n 1 と -l 1 パッケージを1つずつインストールし、要件内のすべての行を別のアイテムとして扱うためにオプションが必要です。
悲しいことに、アップグレードの提案は機能しません。他の詳細を読んだ場合 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が必要です
どうして知っていますか?構築またはインストールする必要がありますか?あなたはあなたがインストールしようとしていたが見ているが見ていたパイモンゴのバージョンを言うのではありません setup.py
現在(3.2.2)バージョンのファイルピモンゴが実行する必要があるものの仕様はありません setup.py
(setup_requires
)インストールに必要なもの(install_requires
)。そのような情報がない場合、PIPはSetUptoolsの特定のバージョンを確保することはできません。 PymongoがSetuptoolsの特定のバージョンを実行する必要がある場合 setup.py
(SetUptoolsを実行することを要求するのではなく setup
機能自体)他の問題は、最近までこれを指定する方法がなかったことです。今、仕様があります - PEP 518 - Pythonプロジェクトの最小ビルドシステム要件の指定, 、これはまもなくPIPに実装する必要があります - PEP 518サポート#3691を実装します.
インストールの順序に関しては、これはPIP 6.1.0で修正されました。
から ピップインストール - インストール順序 セクション PIPのドキュメントの:
V6.1.0の時点で、PIPは扶養家族の前に依存関係をインストールします。つまり、「トポロジー順」になります。これは、PIPが現在注文に関連している唯一のコミットメントです。
以降:
V6.1.0の前に、PIPはインストール注文についてコミットメントをしませんでした。
ただし、Pymongoによる要件の適切な指定がなければ、それも役に立ちません。
@lukasrmsのソリューションから続いて - 私はこれを行うためにこれを行う必要がありました。
cat requirements.txt | xargs -n 1 pip install
要件ファイルにコメントがある場合は、使用する必要があります。
grep -v "^#" requirements.txt | xargs pip install
-e Pipを使用するとサーバーのサイトパッケージがまだ表示され、それが明らかにいくつかのインストールを台無しにしたため、「PIP -E」を使用する代わりに、VirtualEnv内でPIPを実行することになりました。
また、Virtualenvsのないサーバーにも問題がありました。個別のPIPコマンドPymongoを備えたSetUptoolsをインストールしても、インストールを拒否します。
これは、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)
PIP 0.8.3および0.8.2でこれらの問題がありました。
申し訳ありませんが、最初の答えは間違っていました。
PymongoのSetup.pyはSetuptools> = 0.6C9が必要なため不可能ですが、PIPにはSetUptools> = 0.6C9のみをダウンロードしており、まだインストールされていません。
誰かが私が前に指摘した問題でそれについて議論しました。
私は数週間前にそれについて問題を作成しました: 走るな egg_info
以前のパッケージをインストールする前に、要件リストの各パッケージに.
うるさいことはごめんなさい。
最初の答え:
PIPを0.8.3バージョンにアップグレードすると、 インストール順にbugfix.
今、あなたがアップグレードした場合、すべてが機能します:-)
ここでニュースを確認してください: http://www.pip-installer.org/en/0.8.3/news.html