Virtualenv使用了错误的Python,即使它是$PATH中的第一个

人气:929 发布:2022-10-16 标签: linux python virtualenv virtualenvwrapper

问题描述

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

我缩小了范围,发现当我调用python时,当我的Virtualenv激活时,它仍然接触到/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之后很久才出现问题

推荐答案

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

有时,人们使用别名python来尝试确定他们应该使用哪种Python。但通常还有其他更好的方法。例如,在我的Linux机器上,python3在PATH中,但它是我正在使用的真正的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的非外壳程序与我得到的是相同的,并且虚拟环境可以自然地工作。

203