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

python virtualenv does not use correct version of python

我正在创建一个需要我使用 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

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

django_python_2.7/bin/python

显示正确的版本:

Python 2.7.6 (default, Sep  9 2014, 15:04:36) 

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

谁能提供一些提示?是否需要更改 PATH 变量以使其包含到 virtualenv 的 python 的路径?

如果你想更改 virtualenv 中使用的 PYTHONPATH,你可以将以下行添加到你的 virtualenv 的 django_python_2.7/bin/activate 文件

export PYTHONPATH="/path/to/python"
export OLD_PYTHONPATH="$PYTHONPATH"

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

export PYTHONPATH="$OLD_PYTHONPATH"

否则,使用

创建新的env
virtualenv -p /usr/bin/python2.7 django_python_2.7

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

和@skyline75489 提到的一样:

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

仔细检查您的路径。我最近遇到了这样的问题,激活的 virtualenv 中的 运行 which python 仍然是 return 默认系统版本 (/usr/bin/python)。但是,如果我 运行 从 virtualenv 中直接指定二进制文件(./venv/bin/python 等)的脚本,它会按预期工作,所以看起来所有依赖项都已正确安装。

问题是我在 构建所有内容后 移动了父 virtualenv 目录。这意味着所有 virtualenv 路径都指向不再有效的原始位置,并且 python 正确默认为默认系统二进制文件。

以防对其他人有帮助:如果您更改了 venv 文件夹的路径(例如更改父文件夹),就会发生这种情况。这是我的问题。

重新创建您的 virtualenv 将修复它,因为您应该希望创建一个 requirements.txt 来重建您的 virtualenv。

这甚至可能是 OP 的根本原因。

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

  1. 重新创建它

    • 创建 requirements.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 将再次按预期工作。

希望对您有所帮助!

我使用这样的 bash 脚本:

$ source venv/bin/activate
$ alias vpython=$VIRTUAL_ENV/bin/python3

并在想要在虚拟环境中使用 python 可执行文件时使用 vpython。以下是检查 实际上 python 中使用哪个可执行文件的好方法:

>>> import sys
>>> print(f'executable 3[0;33;40m{sys.executable}3[0m')

在我的情况下,系统更新后来自 virtualenv 的符号 link 不知何故被破坏,它切换到默认系统 python 版本。解决方案是用正确的 link 替换符号 link。

  1. 如果您在里面,请停用虚拟环境:

    deactivate

  2. 更改 virtualenv python 符号 link:

    ln -s /your/wanted/python/bin/python /your/virtualenv/bin/python

  3. 再次启动 virtualenv,它应该使用正确的 python 版本。

如果您不确定您的 python 在哪里,那么您可以通过以下方式对其进行本地化: which python3

我遇到了类似的问题。但我拥有它是因为我已将我的 env 文件夹移动到另一个地方。所以,如果你这样做了,只需转到 bin 文件夹中的 activate file 并更改 VIRTUAL_ENV="CurrentPathToYourEnvFolder"(它是文件中的第 40 行)