Python 在虚拟环境中找不到包

问题描述 投票:0回答:5

我正在尝试为项目设置环境,但 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

对我哪里出错有什么建议吗?

python virtualenv
5个回答
5
投票

看起来您正在手动将

$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 的行为不同(即不抛出导入异常),那么这就是您的问题。

希望有帮助。


3
投票

好吧,我想我找到了解决方案,即使不是答案。

  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
引用了错误的站点包目录。虽然我不确定为什么。我想知道点对缓存的使用是否导致站点包引用重置到系统。


2
投票

在 Windows 上,如果您遇到此问题,请检查激活环境后是否正在使用

python
可执行文件中的二进制文件运行后续
.venv\Scripts\Python
命令。

我见过这种奇怪的行为,即使在虚拟环境中使用

activate.bat
文件激活环境,并且将
Scripts\
目录的路径添加到系统路径中,
python
命令仍然使用二进制文件在系统的中央Python安装中。

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

要解决此问题,请在激活环境后运行

pip
python
命令时,指定虚拟环境中可执行文件的正确路径,即

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

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


0
投票

我通过更改项目目录解决了这个问题。将项目目录从桌面移动到另一个位置。它对我在 Windows 上的帮助很大。我将它从 /Desktop 移至 C:/some_folder


0
投票

这可能仅仅取决于您的运行命令。你使用的是“py”还是“python”? .venv\Scripts 目录包含 python.exe 但不包含 py。

© www.soinside.com 2019 - 2024. All rights reserved.