2016-09-22 160 views
0

我想为一个项目设置我的环境,但python无法找到我已用pip安装的模块。Python无法在虚拟环境中找到软件包

我做了以下内容:

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输出helloTwitter/myenv/bin/python 哪个点子输出helloTwitter/myenv/bin/pip

上我会错在何处有何建议?

+1

请给我们输入错误的堆栈跟踪。 –

+0

你能告诉我在哪里找到堆栈跟踪? – Marcus

+0

>>当我尝试导入模块时,说它找不到。 - 那它究竟是怎么“说”呢? –

回答

3

它看起来像你手动设置你的$PATH指向你的虚拟环境。 myenv/bin/activate脚本的全部内容是为您处理此问题。

激活虚拟环境后,您使用pip安装的任何软件包将被放置在相关的venv site-packages目录中(您的情况为myenv/lib/python2.7/site-packages)。当您在虚拟环境中工作时(假定默认行为),不需要像pip --user这样的东西。这全是自动的。

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

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

快速测试可以通过直接运行helloTwitter/myenv/bin/python -c 'import tweepy'来完成。如果它的行为与你正在运行的python不同(即不会抛出导入异常),那么这就是你的问题。

希望有所帮助。

+0

type -a python python是/ Users/Marcus/CodeProjects/helloTwitter/myenv/bin/python python是/ usr/bin/python python是/ usr/bin/python。我不知道你的意思是直接运行python。我可以在这个目录下执行一个脚本。例如python helloTwitter.py >>打印 成功 – Marcus

+0

当我尝试运行导入时,我没有得到任何异常或输出:S – Marcus

0

好吧,我想我找到了一个解决方案,如果不是答案。 1.我卸载了软件包并确保它不在系统或用户中 2.我重新创建了虚拟环境。 3.我检查了环境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被引用错误的站点包目录。虽然我不知道为什么。我想知道是否使用缓存的点数导致站点包引用重置为系统。