Virtualenv使用了错误的python,尽管它是$PATH中的第一个

2024-05-20 08:01:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个问题,python在virtualenv中找不到pip安装的模块。

我缩小了范围,发现当我调用python时,当我的virtualenv in激活时,它仍然指向/usr/bin/python,而不是/home/liam/dev/.virtualenvs/noots/bin/python

当我在virtualenv中使用which python时,我得到:

/home/liam/dev/.virtualenvs/noots/bin/python

当我在virtualenv中查找我的$PATH变量时,我得到:

bash: /home/liam/dev/.virtualenvs/noots/bin:/home/liam/bin:/home/liam/.local/bin:/home/liam/bin:/home/liam/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory

但当我真正运行python时,它会转到/usr/bin/python

为了让我更困惑,如果我运行python3.5,它会从正确的目录(即/home/liam/dev/.virtualenvs/noots/bin/python3.5)中获取python3.5

反正我也没碰过/home/liam/dev/.virtualenvs/noots/bin/pythonpython3.5仍然链接到该目录中的python3。遍历/home/liam/dev/.virtualenvs/noots/bin/并运行./python./python3./python3.5都正常工作。

我正在使用virtualenvwrapper如果这有区别的话,但是问题似乎是最近发生的,在安装virtualenvvirtualenvwrapper很久之后


Tags: pipdev目录homebinvirtualenvusrlocal
3条回答

正如评论中的tdelaney所建议的,我运行alias,发现我以前在.bashrc中将python化名为/usr/bin/python3.5

我从我的.bashrc、ranunalias pythonsource ~/.bashrc中删除了这个别名,问题就解决了。

如果您没有得到which所说的应该得到的程序,那么您需要在链上查找比平台执行器更高的位置。shell通常有一种别名命令的方法,在大多数unixy shell上,您只需输入alias即可查看哪些命令已被重新映射。然后只需要转到shell的配置文件并删除别名。

有时人们会给python起个别名,试图找出他们应该使用的python。但通常还有其他更好的方法。例如,在我的linux机器上,python3位于路径中,但它是指向我正在使用的真正python的符号链接。

td@mintyfresh ~ $ which python3
/usr/bin/python3
td@mintyfresh ~ $ ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 9 Feb 17  2016 /usr/bin/python3 -> python3.4
td@mintyfresh ~ $ 

这很好,因为运行python的非shell程序得到了与我相同的结果,而且虚拟环境自然工作。

我的问题是,我最近将我的virtualenv项目移到了另一个位置,因为这个activate脚本有一个错误的VIRTUAL_ENV路径。

$ cat path_to_your_env/bin/activate

... # some declarations

VIRTUAL_ENV="/path_to_your_env/bin/python"  # <-- THIS LINE
export VIRTUAL_ENV

... # some declarations

要解决这个问题,只需在activate脚本中更新VIRTUAL_ENV

另外,您可能需要修复bin/pip的第一行以链接到真正的python路径。

相关问题 更多 >