Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Virtualenv使用了错误的python,即使它是$PATH中的第一个_Python_Linux_Virtualenv_Virtualenvwrapper - Fatal编程技术网

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