我遇到了一个问题:python
在virtualenv中没有找到由pip安装的模块。
我已将其缩小范围,并发现当我的virtualenv处于激活状态时,当我致电python
时,它仍会延伸至/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
,它会从正确的目录中抓取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
,如果这有所不同,但问题似乎是最近发生的,很久就在安装后virtualenv
和virtualenvwrapper
答案 0 :(得分:5)
在评论中提到tdelaney时,我运行了alias
,发现我之前在我的python
中将/usr/bin/python3.5
别名.bashrc
。
我从.bashrc
删除了该别名,运行了unalias python
和source ~/.bashrc
,问题就解决了。
答案 1 :(得分:4)
我的问题是,由于这个activate
脚本的路径错误 VIRTUAL_ENV
,我最近将具有virtualenv的项目移动了到另一个位置。
要解决此问题,只需在VIRTUAL_ENV
脚本中更新activate
。
另外,您可能需要修复bin/pip
的第一行才能链接到真实的python路径。
答案 2 :(得分:3)
如果你没有得到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程序与我做的相同,虚拟环境自然地工作。
答案 3 :(得分:1)
在Cygwin上,即使我创建了将/usr/bin/python
指向F:\Python27\python.exe
的符号链接后,我仍然遇到问题。这里,在source env/Scripts/activate
之后,which python
仍然是/usr/bin/python
。
很长一段时间后,我想出了一个解决方案。即使创建了符号链接,也必须使用virtualenv env
来代替virtualenv -p F:\Python27\python.exe env
。
答案 4 :(得分:0)
我目前有同样的问题。 Virtualenv是在Windows中创建的,现在我正在尝试从WSL运行它。
在virtualenv中,我将python.exe重命名为python3.exe(因为我在WSL中只有python3命令)。在$ PATH中,我的virtualenv文件夹是第一个,没有python的别名。我收到which python3
/usr/bin/python3
。在/usr/bin/python3
中有符号链接`python3-> python3.6。我想这对订单解决无关紧要。
答案 5 :(得分:0)
遇到了完全相同的问题。 我跑了:
virtualenv -p /venv/bin/python3 env
并获得了拒绝的许可。 所以我试过了:
sudo chmod 777 -R /venv/bin