Python没有找到它的包

时间:2016-05-13 18:40:05

标签: python bash pip virtualenv

我给自己写了一个方便的bash脚本,它解决了使用自己编译的virtualenv和python创建virtualenv的任务。它旨在创建一个大多数自包含的virtualenv,如果需要,可能只在系统级安装本机库,但在virtualenv中安装所有python包和virtualenv和pip等等。

可以找到脚本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 python知道:

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

好的,所以它正在使用我的本地点。

检查包裹:

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不能找到它们?让我们看看这些软件包的位置,只需尝试删除一个:

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

所以如果我理解正确的话,这个表明它看起来并不正确。

注意

该脚本执行以下操作,这些操作可能并不明显:

  • 使用前缀(本地python)编译python
  • 为本地python编译virtualenv
  • 它将pip别名为已安装python版本的本地点
  • 它将virtualenv别名为本地安装的
  • 如果指定
  • ,它会从pypi安装软件包
  • 如果有更新的版本,则会更新本地点数

我仍然是编写bash脚本的初学者,所以我认为脚本的结构和逻辑很容易理解。它还打印有关其在终端中的操作成功的信息。

进一步说明

  • 我没有使用susudo来运行脚本。
  • 我的操作系统是Fedora 22,虽然我认为在这种情况下任何主要的发行版都会以相同的方式工作。
  • 操作系统最近已更新。

问题:那么为什么Python不能找到它们/它自己的包呢? (我需要改变什么?)

1 个答案:

答案 0 :(得分:0)

你可以尝试比较你的脚本中的pyhton和pip的路径,并在你的系统中手动: which pythonwhich pip? 之后检查pip freeze | grep pandas它应该返回你的包...如果没有你需要将这个包添加到你的python的site-packages文件夹中。