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

lia*_*ins 12 python linux virtualenv virtualenvwrapper

我有一个问题,python在virtualenv中没有找到由pip安装的模块.

我把它缩小了,发现python当我的virtualenv激活时我打电话,它仍然伸出/usr/bin/python而不是/home/liam/dev/.virtualenvs/noots/bin/python.

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

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

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

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它会从正确的目录中抓取python3.5(即/home/liam/dev/.virtualenvs/noots/bin/python3.5)

/home/liam/dev/.virtualenvs/noots/bin/无论如何我还没有碰过.python并且python3.5仍然链接到python3该目录中.遍历/home/liam/dev/.virtualenvs/noots/bin/和运行./python,./python3./python3.5所有正常工作.

我正在使用,virtualenvwrapper如果这有所作为,但问题似乎最近发生,很久以后安装virtualenvvirtualenvwrapper

vis*_*ell 12

我的问题是,由于该脚本路径错误,我最近带有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
Run Code Online (Sandbox Code Playgroud)

要解决此问题,只需VIRTUAL_ENVactivate脚本中进行更新。

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

  • 我重命名了项目文件夹名称并遇到了同样的问题。 (3认同)

lia*_*ins 6

正如tdelaney在评论中所说,我跑了alias,发现我之前已经在我的房子里混淆python了./usr/bin/python3.5.bashrc

我删除了该别名从我的.bashrc,跑unalias python,和source ~/.bashrc,问题得到了解决.


tde*_*ney 6

如果你没有得到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 ~ $ 
Run Code Online (Sandbox Code Playgroud)

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