2016-05-13 66 views
3

我給自己寫了一個方便的bash腳本,它解決了用自己編譯好的virtualenv和python創建一個virtualenv的任務。它旨在創建一個基本上自包含的virtualenv,如果需要,可能只有系統級安裝了本地庫,但是在virtualenv中安裝所有python包,virtualenv和pip等。Python沒有找到它的包

該腳本可以找到here

我調用腳本如下:

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 

鑑於編譯Python和的virtualenv安裝在系統上所需的軟件包,該腳本創建了一個很好的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' 

咦?所以沒有可用的軟件包?讓我們再次檢查PIP:

which pip 

輸出

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

好了,所以它的使用我的本地點子。

檢查套餐:

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) 

嗯包都是存在的,那麼爲什麼不能蟒蛇找到他們呢?讓我們來看看其中的包的位置,簡單地試圖刪除一個:

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 

啊哈,原來包在路徑中。

上查不到,如果蟒蛇看起來在正確的地方的另一種嘗試:

>>> 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 

所以這一個表明它不看在正確的地方,如果我理解正確。

注意

該腳本執行下面的東西,這可能不是很明顯:

  • 編譯蟒蛇用一個前綴(本地蟒蛇)
  • 編譯的virtualenv爲當地的蟒蛇
  • 它將別名pip添加到安裝的python版本的本地點中
  • 它將virtualenv別名爲本地安裝一個
  • 如果指定
  • 它更新本地點子是否有可用的更新版本

我是初學者還是在寫的bash腳本從PyPI將安裝軟件包,所以我覺得結構和腳本的邏輯很容易理解。它還打印有關在終端中操作成功的信息。


其它注意事項

  • 我沒有使用susudo運行該腳本。
  • 我的操作系統是Fedora 22,儘管我認爲在這種情況下任何主要的發行版都會以相同的方式工作。
  • 操作系統已於近期更新。

問題:那麼爲什麼Python不能找到它們/它自己的包? (我需要改變什麼?)

+0

你爲什麼要從源代碼編譯python?爲什麼不使用fedora軟件包? – hd1

+0

@ hd1這應該是一個獨立的virtualenv。我在我的系統上安裝了python以及anaconda發行版,但這不是這個腳本的要點。 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是'/ home/xiaolong/development/Python/udacity_model_building_and_validation/lib/python3.4/site-packages',它錯過了'localpython'目錄 – MacHala

回答

0

你可以嘗試比較你的腳本中pyhton和pip的路徑並手動在你的系統中: which pythonwhich pip? 之後,檢查pip freeze | grep pandas它應該返回你的包...如果沒有,你需要將這個包添加到您的python的site-packages文件夾。