16

ここでは違いはないと思いますが、Python 2.7 を使用しています。

したがって、私の質問の一般的な部分は次のとおりですvirtualenv。プロジェクトごとに個別に使用します。私には管理者のアクセス権がありませんし、とにかくシステムにインストールされたパッケージを台無しにしたくありません。当然のことながら、ホイールを使用して、s 全体でパッケージのアップグレードとインストールを高速化したいと考えていますvirtualenv。依存関係が特定の .xml 内でのみ満たされるホイールを構築するにはどうすればよいvirtualenvですか?

具体的には発行

pip wheel -w $WHEELHOUSE scipy

で失敗します

Building wheels for collected packages: scipy
  Running setup.py bdist_wheel for scipy
  Destination directory: /home/moritz/.pip/wheelhouse
  Complete output from command /home/moritz/.virtualenvs/base/bin/python -c "import setuptools;__file__='/home/moritz/.virtualenvs/base/build/scipy/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /home/moritz/.pip/wheelhouse:
  Traceback (most recent call last):

  File "<string>", line 1, in <module>

  File "/home/moritz/.virtualenvs/base/build/scipy/setup.py", line 237, in <module>

    setup_package()

  File "/home/moritz/.virtualenvs/base/build/scipy/setup.py", line 225, in setup_package

    from numpy.distutils.core import setup

ImportError: No module named numpy.distutils.core

----------------------------------------
  Failed building wheel for scipy
Failed to build scipy
Cleaning up...

numpyはグローバルに存在せず、インストール済みの がアクティブなときにホイールのビルドが機能するためvirtualenv、特定の のバージョンにnumpyホイールを依存させるのはひどい考えのように思えます。virtualenvnumpy

pandasまたnumpy、独自のコンポーネントをインストールするように見えますが、numpyそれが最善の解決策であるかどうかはわかりません。

インストールnumpyして--user、それを使用してscipyホイールを作成できます。より良いオプションはありますか?

4

1 に答える 1

15

問題の説明

  • scipy他のパッケージ ( など) に依存しているが、その要件/依存関係を宣言していない python パッケージ ( など)numpysetup.pyあります。
  • 現在の環境が必要なパッケージを提供している場合、そのようなパッケージのホイールの構築は成功します。
  • 必要なパッケージが利用できない場合、ホイールの構築は失敗します。

注: 理想的な解決策は、setup.py必要なパッケージ宣言を追加して、破損を修正することです。しかし、これはほとんど実現不可能であり、別の方法で回避する必要があります。

解決策: 最初に必要なパッケージをインストールします

手順(必要なインストールのscipy場合numpy)には2つのステップがあります

  1. 車輪を作る
  2. ホイールを使用して、必要なパッケージをインストールします

操舵室に必要な車輪を装着する

これは 1 回だけ実行する必要があり、その後は何度でも再利用できます。

  1. wheel からのインストールが許可されるように適切に構成された pip 構成があり、wheelhouse ディレクトリがセットアップされ、次の例のように重複しdownload-cacheています。find-linkspip.conf

    [global]
    download-cache = /home/javl/.pip/cache
    find-links = /home/javl/.pip/packages
    
    [install]
    use-wheel = yes
    
    [wheel]
    wheel-dir = /home/javl/.pip/packages
    
  2. コンパイルする必要があるすべてのパッケージに必要なすべてのシステム ライブラリをインストールします。

  3. 必要なパッケージのホイールを構築します ( numpy)

    $ pip wheel numpy
    
  4. virtualenv をセットアップし (1 回だけ必要)、有効にしてそこにインストールしますnumpy

    $ pip install numpy
    

    ホイールの準備ができているので、それは迅速でなければなりません。

  5. scipy(まだvirtualenvにあります)のホイールを構築します

    $ pip wheel scipy
    

    これで、操舵室に必要な車輪が取り込まれました。

  6. 一時的な virtualenv を削除できます。もう必要ありません。

新しい virtualenv へのインストール

私は、あなたが新しいvirtualenvを作成し、それをアクティブ化し、scipyそこにインストールしたいと思っていると仮定しています。

scipy新しいホイールから直接インストールscipyすると、欠落している場合でも失敗しnumpyます。numpyこれは、最初にインストールすることで克服します。

$ pip install numpy

そして、scipyで終了します

$ pip install scipy

これは 1 回の呼び出しで実行できると思います (ただし、テストはしていません)。

$ pip install numpy scipy

scipy実証済みバージョンの繰り返しインストール

将来のある時点でscipyまたはの新しいリリースnumpyがリリースされ、pip がホイールハウスに wheel がない最新バージョンをインストールしようとする可能性があります。

これまで使用してきたバージョンで生活できる場合は、requirements.txtと のバージョンを記述して作成し、そこからインストールする必要がnumpyあります。scipy

これにより、必要なパッケージが実際に使用される前に存在することが保証されます。

于 2014-06-22T17:17:36.653 に答える