Python无法在Virtual Environment中找到包

时间:2016-09-22 05:30:37

标签: python virtualenv

我正在尝试为项目设置我的环境,但是python无法找到我用pip安装的模块。

我做了以下事情:

mkdir helloTwitter
cd helloTwitter
virtualenv myenv
Installing setuptools, pip, wheel...done.
source myenv/bin/activate

pip install tweepy
Collecting tweepy
  Using cached tweepy-3.5.0-py2.py3-none-any.whl
Collecting six>=1.7.3 (from tweepy)
  Using cached six-1.10.0-py2.py3-none-any.whl
Collecting requests>=2.4.3 (from tweepy)
  Using cached requests-2.11.1-py2.py3-none-any.whl
Collecting requests-oauthlib>=0.4.1 (from tweepy)
  Using cached requests_oauthlib-0.6.2-py2.py3-none-any.whl
Collecting oauthlib>=0.6.2 (from requests-oauthlib>=0.4.1->tweepy)
Installing collected packages: six, requests, oauthlib, requests-oauthlib, tweepy
Successfully installed oauthlib-2.0.0 requests-2.11.1 requests-oauthlib-0.6.2 six-1.10.0 tweepy-3.5.0

当我尝试导入模块时,它说无法找到它。

$ PATH中的第一个条目是helloTwitter/myenv/bin 所有软件包都显示在环境site-packages目录中。 我似乎正在使用正确的python和pip。 哪个python输出helloTwitter/myenv/bin/python 哪个点数输出helloTwitter/myenv/bin/pip

关于我哪里出错的任何建议?

2 个答案:

答案 0 :(得分:3)

您似乎手动将$PATH设置为指向虚拟环境。 myenv/bin/activate脚本的重点是为您处理这个问题。

激活虚拟环境后,使用pip安装的任何软件包都将放在相关的venv site-packages目录中(在您的情况下为myenv/lib/python2.7/site-packages)。当您在虚拟环境中工作时(假设默认行为),pip --user之类的内容是不必要的。这一切都是自动的。

运行activate后,您可以使用find -iname tweepy检查正在使用的python二进制文件。

别名也可能导致问题。 which是一个外部命令,并且不会总是选择这些命令。 type -a python将清除这些内容。

可以直接运行helloTwitter/myenv/bin/python -c 'import tweepy'来进行快速测试。如果这种行为有所不同,但是你当前正在运行python(即没有抛出导入异常),那么这就是你的问题。

希望有所帮助。

答案 1 :(得分:0)

好吧,我想我找到了一个解决方案,如果不是答案的话。 1.我卸载了包,并确保它不在系统或用户中 2.我重新创建了虚拟环境。 我检查了环境python和pip的使用情况。 4.这次安装我的软件包时添加了--no-cache-dir选项。 包安装成功。 现在Python可以找到包。

derptop:environmentScience Marcus$ python
>>> from tweepy import StreamListener
>>> StreamListener
<class 'tweepy.streaming.StreamListener'>

我检查了sys.path,它现在包含虚拟环境中的site-packages目录,之前没有该目录。

sys.path

的输出
['', ....'/Users/Marcus/CodeProjects/environmentScience/myenv/lib/python2.7/site-packages']

据我所知,sys.path引用了错误的站点包目录。虽然我不确定为什么。我想知道是否使用缓存导致网站包引用重置为系统。