Virtualenv使用了错误的python,即使它是$PATH中的第一个
我遇到了一个问题,Virtualenv使用了错误的python,即使它是$PATH中的第一个,python,linux,virtualenv,virtualenvwrapper,Python,Linux,Virtualenv,Virtualenvwrapper,我遇到了一个问题,python在virtualenv中找不到pip安装的模块 我缩小了它的范围,发现当我调用python激活我的virtualenv时,它仍然会接触到/usr/bin/python,而不是/home/liam/dev/.virtualenvs/noots/bin/python 当我在virtualenv中使用哪个python时,我得到: /home/liam/dev/.virtualenvs/noots/bin/python 当我在virtualenv中查找我的$PATH变量时,
python
在virtualenv中找不到pip安装的模块
我缩小了它的范围,发现当我调用python
激活我的virtualenv时,它仍然会接触到/usr/bin/python
,而不是/home/liam/dev/.virtualenvs/noots/bin/python
当我在virtualenv中使用哪个python
时,我得到:
/home/liam/dev/.virtualenvs/noots/bin/python
当我在virtualenv中查找我的$PATH
变量时,我得到:
bash:/home/liam/dev/.virtualenvs/noots/bin:/home/liam/bin:/home/liam/bin:/home/liam/bin:/home/liam/bin/.local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/usr/games:/usr/local/games:/snap/bin:没有这样的文件或目录
然而,当我实际运行python
时,它会转到/usr/bin/python
为了让我更加困惑,如果我运行python3.5
,它会从正确的目录(即/home/liam/dev/.virtualenvs/noots/bin/python3.5
)获取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
之后很久,正如评论中建议的那样,我运行了alias
,发现我以前在.bashrc
中将python
别名为/usr/bin/python3.5
我从我的
.bashrc
中删除了这个别名,运行了unalias python
和source~/.bashrc
,问题就解决了。如果你没有得到所说的你应该得到的程序,你需要比平台执行器更高的层次。Shell通常有一种别名命令的方法,在大多数unixy Shell上,您只需输入alias
即可查看哪些命令已重新映射。然后,只需转到shell的配置文件并删除别名即可
有时,人们将python命名为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的项目移动到了另一个位置,因为这个激活脚本有错误的虚拟环境路径
$ cat path_to_your_env/bin/activate
... # some declarations
VIRTUAL_ENV="/path_to_your_env/bin/python" # <-- THIS LINE
export VIRTUAL_ENV
... # some declarations
$cat path\u到您的\u env/bin/activate
... # 一些声明
VIRTUAL_ENV=“/path_to_your_ENV/bin/python”#在Cygwin上,即使创建了指向/usr/bin/python
到的符号链接,我仍然有一个问题。在这里,在源环境/Scripts/activate
之后,哪个python
仍然是/usr/bin/python
过了很长时间,我想出了一个解决办法。您必须使用virtualenv-p F:\Python27\python.exe env
,而不是使用virtualenv-p F:\Python27\python.exe env
,即使您已经创建了符号链接。我目前也遇到了同样的问题。Virtualenv是在Windows中创建的,现在我正在尝试从WSL运行它。
在virtualenv中,我将python.exe重命名为python3.exe(因为我在WSL中只有python3命令)。在$PATH中,我的virtualenv文件夹是第一个,python没有别名。我收到哪个python3
/usr/bin/python3
。在/usr/bin/python3
中有符号链接`python3->python3.6。我想这与订单解决方案无关。也有同样的问题。
我跑:
而且被拒绝了。
所以我试着:
sudo chmod 777 -R /venv/bin
在命令行上运行alias
,查看python
是否已使用别名。啊,谢谢!这就是问题所在。请发布解决方案,因为这是一个有趣的问题。我已经重命名了我的项目文件夹名称,并面临相同的问题。我可以关联。这实际上对我很有帮助。如果我可以补充一点,您需要在VIRTUAL_ENV上指定的是到您的虚拟环境的路径,而不是python所在的位置谢谢!到处找。很难用语言来表达这个问题。这是公认的答案吗(我在你的回答中没有看到使用alias
的例子。你谈论了一件事,然后展示了另一件令人困惑的事。如果我没有立即传达我的意思,那就很抱歉了。@AdamJagosz-我建议不要给python加别名,因此不需要展示如何做。我展示了一个linux debs和RPM的示例通常使用符号链接来处理别名问题。@AdamJagosz如果这有帮助,别名通常会设置在~/.bashrc
或类似文件中(取决于您的shell)。我不确定Python安装程序是否将别名放在那里,但在我的例子中,我错放了一个别名。
sudo chmod 777 -R /venv/bin