python virtualenv没有使用正确版本的python

Cal*_* Hu 4 python virtualenv python-2.7

我正在创建一个需要使用python2.7.6的Django应用。我的系统已安装python3.4.1,因此我必须使用安装了python2.7的virtualenv。我使用Pycharm安装了一个virtualenv,并将其命名为django_python_2.7,但是当我在终端中将其激活并运行“ python”时,它仍然表明它正在使用系统的python3.4.1:这是我所做的:

  1. 激活环境:

    source django_python_2.7/bin/activate

  2. 运行python,它显示:

    Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 00:54:21) --->这是系统级别的python,而不是virtualenv中安装的一个

但是,当我运行时which python,它显示了指向virtualenv的python版本的正确路径:

/Users/calvinmwhu/....../django_python_2.7/bin/python
Run Code Online (Sandbox Code Playgroud)

当我显式运行该virtualenv中安装的python版本时:

django_python_2.7/bin/python
Run Code Online (Sandbox Code Playgroud)

它显示正确的版本:

Python 2.7.6 (default, Sep  9 2014, 15:04:36) 
Run Code Online (Sandbox Code Playgroud)

我不知道是怎么回事。我正在Pycharm IDE中开发此应用程序,但我真的很喜欢在终端中执行命令。但是在终端中,virtualenv没有使用正确版本的python。为什么为什么在virtualenv中运行简单的“ python”命令仍然默认为系统的python?

有人可以提供一些提示吗?是否有必要更改PATH变量以使其包含virtualenv的python的路径?

小智 9

venv如果您更改了venv 目录的任何父文件夹的路径或对其进行了重新命名,那么这将破坏配置的路径,如果是这种情况,您有两个选择:

  1. 重新创造它

    • 使用以下命令创建 requests.txt 文件:pip freeze > requirements.txt

    • 删除venv目录:rm -r old-vnev/

    • 使用正确的名称创建一个新的 virtualenv:python -m venv new-venv
    • 激活新的虚拟环境:source new-venv/bin/activate
    • 从requirements.txt安装包:pip install -r requirements.txt
  2. 另一种更简单的方法

    • 搜索字符串的所有出现位置old/path/to/your/venv/
    • 将它们替换为correct/path/to/your/venv/

之后source new-venv/bin/activate将再次按预期工作。

希望这有帮助!


小智 6

我发现了同样的问题...

就像@skyline75489提到的:

我忘记了我之前为我的 python3 可执行文件指定了一个别名。
我在主目录的 .bash 文件中找到了它并将其删除。
在我的虚拟环境中一切都恢复正常。


itz*_*nTV 5

如果要更改PYTHONPATHvirtualenv中使用的名称,可以将以下行添加到virtualenv的django_python_2.7/bin/activate文件中

export PYTHONPATH="/path/to/python"
export OLD_PYTHONPATH="$PYTHONPATH"
Run Code Online (Sandbox Code Playgroud)

要在停用时恢复到其原始值,可以在django_python_2.7/bin/postdeactivate脚本中添加以下行。

export PYTHONPATH="$OLD_PYTHONPATH"
Run Code Online (Sandbox Code Playgroud)

否则,env使用

virtualenv -p /usr/bin/python2.7 django_python_2.7
Run Code Online (Sandbox Code Playgroud)

  • @itzMEonTV,感谢您的回答。但是不应该在 `export PYTHONPATH="/path/to/python"` 之前`export OLD_PYTHONPATH="$PYTHONPATH"` 吗? (2认同)