23

私はこのようなrequirements.txtファイルを持っています:

numpy
matplotlib

pip install -r requirements.txt新しいvirtualvenvを試してみると、次のようになります。

REQUIRED DEPENDENCIES

             numpy: no

                    * You must install numpy 1.1 or later to build

                    * matplotlib.

最初にnumpyをインストールし、後でmatplotlibをインストールすると、機能します。ただし、使い続けたいと思いpip install -r requirements.txtます。出来ますか?

4

6 に答える 6

22

Matplotlib と pip はうまく連携していないようです。ですので、この場合は仕方ないと思います。

pip最初に要件ファイルにリストされているパッケージをダウンロードして実行しますがsetup.py、実際にはインストールしません(の内部についてはよくわかりませんpip)。このようにしてすべてのパッケージが準備されたら、それらをインストールします。

問題は、がインストールされているmatplotlibかどうかをチェックすることです (チェック自体は で定義されています)。そのため、チェックが実行された時点ではインストールされておらず、matplotlibが終了して、受け取ったエラー メッセージが表示されます (ビルドに numpy が必要な場合があるため、これはバグではない可能性があります)。numpysetup.pysetupext.pynumpysetup.py

これは pip issue #24issue #25で一度対処されました。問題はクローズされましたが、詳細を説明します。

私が今まで行っていることは、最初に numpy をインストールしてから、要件ファイルからすべてのパッケージをインストールすることです。

2012 年 12 月更新

この問題に対処する新しいオープンピップの問題があります。

2013 年 4 月更新

問題は WONTFIX としてクローズされます

于 2012-08-08T12:06:44.203 に答える
10

これはライブラリの既知の問題であり、現在、Matplotlib 拡張提案として議論されています: https://github.com/matplotlib/matplotlib/wiki/MEP11。修正されるまで、私が想像できる唯一の解決策は、ライブラリを再パッケージ化してnumpyチェックを削除することです。

于 2012-11-20T00:01:38.457 に答える
1

はい。「requirements.txt」は、pip がパッケージのインストールに使用できる単なるフラット ファイルです。そのファイルで、依存関係のバージョンを変更できます。たとえば、少なくとも 1.1 が必要なように見えるので、「numpy」の行を次のように変更してみてください。

numpy==1.1

または、次のように >= を使用できます。

numpy>=1.1

これがあなたを引き止めているのかもしれません。しかし、私の知る限り、matplotlib はすでに numpy に依存しているはずです。それは修正する必要があるかもしれないようです。

これも参照してください最小および最大バージョン範囲でパッケージをインストールする方法?

setup.py または pip 要件ファイルで、パッケージの依存関係をインストールする順序を制御するにはどうすればよいですか?

于 2012-08-07T20:50:37.507 に答える
0

最近pipで遊んだ後、できれば生成中に、要件ファイルを手動で再配置する必要があることに気付きました。

単純なケース (つまりnumpymatplotlib順序付けが必要な場合) では、requrements ファイルを逆にすることができます。pip freeze | sort -r

于 2012-11-17T05:17:29.283 に答える
0

スクリプトを呼び出して virtualenv を繰り返し設定することに慣れてきました。これには 2 つの要件ファイルが含まれます。

要件ファイルを介してインストールする場合、pip は「オール オア ナッシング」を実行しようとするため、慣れるのに問題はありません。このようにして、依存関係が最初にインストールされるように、インストールを段階的に行うことができます。

于 2013-12-04T10:54:17.057 に答える