繁体   English   中英

Python 在虚拟环境中找不到包

[英]Python can't find packages in Virtual Environment

我正在尝试为一个项目设置我的环境,但 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所有包都显示在环境站点包目录中。 我似乎正在使用正确的 python 和 pip。 哪个 python 输出helloTwitter/myenv/bin/python哪个 pip 输出helloTwitter/myenv/bin/pip

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

看起来您正在手动设置$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. 我卸载了该软件包并确保它不在系统或用户中。
  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引用了错误的站点包目录。 虽然我不确定为什么。 我想知道 pips 对缓存的使用是否导致站点包引用重置为系统。

在 Windows 上,如果您遇到此问题,请检查在激活您的环境后,后续python命令正在使用.venv\Scripts\Python可执行文件中的二进制文件运行。

我见过这种奇怪的行为,即使在虚拟环境中使用activate.bat文件激活环境,并且将Scripts\目录的路径添加到系统路径中, python命令仍然使用中央 Python 中的二进制文件安装在系统中。

这导致正在安装的任何软件包都不是安装在虚拟环境中,而是安装在全局系统位置中。

要解决此问题,在激活环境后运行pippython命令时,请指定虚拟环境中可执行文件的正确路径,即

.venv\Scripts\python -m pip install setup.py

这应该将软件包安装到虚拟环境中并解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM