虚拟环境使用了错误的sys.path

13

刚才一切都运转良好,但我不知道我做了什么事情惹恼了virtualenv,现在它的行为非常奇怪。求助。

创建virtualenv时,我使用这个命令:

virtualenv -p /usr/bin/python3 venv
现在我发现使用pip install package安装的包没有被Python加载。虽然这些包已经由pip正确安装到venv/lib/python3.4/site-packages目录下,但是我的虚拟环境中的Python并没有在该目录下查找包。
在Python中:
import sys
sys.path
['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']

这是错误的!它使用了错误的路径,而且至少应该包括

/myhomedir/venv/lib/python3.4/site-packages

所以我可以导入我的包。

事实上,在虚拟环境中打开的Python中:

import sys
sys.path.append("/myhomedir/venv/lib/python3.4/site-packages")
import package

运作正常!!

但我不想每次使用Python都手动添加这条路径。 我做了一些事情让sys.path非常生气,但我不知道是什么原因。

我只是运行了sudo apt-get updated和sudo apt-get upgraded以确保它不是冲突……但没有结果。

可能相关:

我注意到我的virtualenv命令输出以下行:

Using base prefix '/usr'

我不记得以前发生过这种情况。但是即使我执行virtualenv venv(没有指定Python版本,也没有出现输出),我的sys.path仍然不正确,包无法加载。

大家有什么想法吗?非常感谢帮助。

1个回答

21

解决了问题...如果其他人有同样的问题,我会发布结果。这是最高级别的PICNIC错误。

在我的.bashrc文件中,我有一个别名python=/usr/bin/python3

当我的虚拟环境尝试执行python时,它被重定向到/usr/bin而不是使用它内部的python。


3
两天的搜索和问答才解决了这个问题。谢谢! - Rick
有没有办法让环境在不必每次导出Python路径的情况下使用内部Python? - Long Le
@LongLe 是的,只需将 "alias python=python3" 和 "alias pip=pip3" 添加到您的 ~/.bashrc 文件中,并创建一个从 /usr/bin/python 到 /usr/bin/python3 的符号链接 "sudo ln -sfn /usr/bin/python3 /usr/bin/python"。 - shloosh
我有同样的问题,但我的~/.bashrc没有那个别名,所以我无法删除它。我的virtualenv正在使用/usr/bin/python3。 - Dominic M.
1
你可以通过 alias | grep python 命令检查 Python 是否被别名化,然后通过 unalias python 命令取消别名。 - aydow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接