2016-05-13 105 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文件夹。