2016-05-13 5 views
3

自分自身でコンパイルしたvirtualenvとpythonでvirtualenvを作成するタスクを解決する便利なbashスクリプトを書きました。必要に応じてネイティブライブラリをシステムレベルにインストールしただけの多機能なvirtualenvを作成することを目指していますが、すべてのpythonパッケージとvirtualenvとpipなどをvirtualenv内にインストールします。Pythonはパッケージを見つけられません

スクリプトはhereです。次のように

私はスクリプトを呼び出す:

のpythonとvirtualenvのをコンパイルするために必要なパッケージがシステムにインストールされているが与えられ
self_contained_venv.sh \ 
-n udacity_model_building_and_validation \ 
-p https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tar.xz \ 
-v https://pypi.python.org/packages/c8/82/7c1eb879dea5725fae239070b48187de74a8eb06b63d9087cd0a60436353/virtualenv-15.0.1.tar.gz#md5=28d76a0d9cbd5dc42046dd14e76a6ecc \ 
-d pandas scikit-learn seaborn 

を、スクリプトが素敵virtualenvのを作成します。しかし、virtualenv内からインストールされたモジュール/パッケージにアクセスしようとすると、pythonはそれらを見つけることができません。これを実証するために、私は、コマンドと、ここでのコードのいくつかの出力出してあげる:もちろん、すべての

まず私はvirtualenvのをアクティブにする必要があります。

. bin/activate 

出力:なしは、問題なく動作します。

それから私はPYTHONPATHパイソンを印刷するには、認識している:

import sys 
for i in sys.path: 
    print(i) 

出力:これまでのところ

/home/xiaolong/development/Python/udacity_model_building_and_validation/lib/python34.zip 
/home/xiaolong/development/Python/udacity_model_building_and_validation/lib/python3.4 
/home/xiaolong/development/Python/udacity_model_building_and_validation/lib/python3.4/plat-linux 
/home/xiaolong/development/Python/udacity_model_building_and_validation/lib/python3.4/lib-dynload 
/home/xiaolong/development/Python/udacity_model_building_and_validation/localpython/lib/python3.4 
/home/xiaolong/development/Python/udacity_model_building_and_validation/localpython/lib/python3.4/plat-linux 
/home/xiaolong/development/Python/udacity_model_building_and_validation/lib/python3.4/site-packages 

とても良いです。それから私は私のbashスクリプトの使用時に、私はインストールモジュール/パッケージをインポートしよう:pandas

python 

(IDLEが実行されている)

import pandas as pd 

出力

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named 'pandas' 

別の試み:

import numpy as np 

出力

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named 'numpy' 

えっ?だから、利用可能なパッケージはありませんか?

which pip 

出力:もう一度チェックピップをすることができます

alias pip='localpython/bin/pip3.4' 
./localpython/bin/pip3.4 

[OK]を、ので、それは私の地元のピップを使用しています。

チェックパッケージ:

pip list 

出力

numpy (1.11.0) 
pandas (0.18.1) 
pip (8.1.2) 
psutil (4.1.0) 
Python-contrib-nbextensions (alpha) 
python-dateutil (2.5.3) 
pytz (2016.4) 
PyYAML (3.11) 
setuptools (18.2) 
six (1.10.0) 
virtualenv (15.0.1) 

フムのパッケージがありますが、なぜそれらを見つけることができませんPythonの?これらのパッケージが置かれている場所のは、単に1を削除しようとすることで、見てみましょう:

pip uninstall pandas 

出力(それは多くのページを埋めるため、短縮):

Uninstalling pandas-0.18.1: 
/home/xiaolong/development/Python/udacity_model_building_and_validation/localpython/lib/python3.4/site-packages/pandas-0.18.1-py3.4.egg-info 
    /home/xiaolong/development/Python/udacity_model_building_and_validation/localpython/lib/python3.4/site-packages/pandas/__init__.py 
    /home/xiaolong/development/Python/udacity_model_building_and_validation/localpython/lib/python3.4/site-packages/pandas/__pycache__/__init__.cpython-34.pyc 
    /home/xiaolong/development/Python/udacity_model_building_and_validation/localpython/lib/python3.4/site-packages/pandas/__pycache__/_version.cpython-34.pyc 
    /home/xiaolong/development/Python/udacity_model_building_and_validation/localpython/lib/python3.4/site-packages/pandas/__pycache__/info.cpython-34.pyc 

なるほど、パッケージあるので、パスで。

Pythonが適切な場所に見えるかどうかを見つけることに別の試み:

>>> from distutils.sysconfig import get_python_lib 
>>> print(get_python_lib()) 
/home/xiaolong/development/Python/udacity_model_building_and_validation/lib/python3.4/site-packages 

ので、この1つは私が正しく理解すれば、それは、正しい場所に見えないことを示します。

:スクリプトは明白ではないかもしれない次の事、ありません

:接頭辞で

  • コンパイルパイソンを(ローカルのpython)地元のpython
  • ため
  • コンパイルvirtualenvの
  • それは、インストールされたPythonのバージョンのローカルピップへのエイリアスpip
  • 別名virtualenvにローカルに1
  • 利用できる新しいバージョン

がある場合

  • 指定し、それは地元のピップを更新、私は書き込みのbashスクリプトではまだ初心者ですので、私は構造を考える場合、それはは、PyPIからパッケージをインストールし、インストールスクリプトのロジックはかなり分かりやすいです。また、端末での操作の成功に関する情報も表示されます。


    さらに注記

    • 私はスクリプトを実行するsuまたはsudoを使用していませんでした。
    • 私のOSはFedora 22ですが、この場合、主要なディストリビューションは同じように動作すると思います。
    • OSが最近更新されました。

    質問:なぜ、Pythonで/独自のパッケージを見つけることができないのですか? (何を変更する必要がありますか?)

  • +0

    なぜソースからPythonをコンパイルしていますか?なぜfedoraパッケージを使用しないのですか? – hd1

    +0

    @ hd1これは、自己完結型のvirtualenvであると考えられています。私は自分のシステムとアナコンドのディストリビューションにpythonを持っていますが、それはこのスクリプトの要点ではありません。 virtualenvはシステムパッケージに依存しない独自のPythonインタプリタ、独自パッケージなどを持ちます。これについての情報を質問に追加します。 – Zelphir

    +0

    pipからの最初の行アンインストール出力: '/ home/xiaolong/development/Python/udacity_model_building_and_validation/localpython/lib/python3.4/site-packages/s'はあなたのsys.pathのsite-packagesディレクトリにありませんsys.pathは 'localpython'ディレクトリにない'/home/xiaolong/development/Python/udacity_model_building_and_validation/lib/python3.4/site-packages'です – MacHala

    答えて

    0

    あなたのスクリプトで、手動でシステムにpyhtonとピップへのパスを比較しようとすることができます: which pythonwhich pip? このチェックの後にpip freeze | grep pandasあなたはパッケージを返すべきです。もしあなたがpythonのsite-packagesフォルダにこのパッケージを追加する必要がなければ。

    関連する問題