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:
这是我所做的:
激活环境:
source django_python_2.7/bin/activate
运行 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 目录的任何父文件夹,那么这将破坏配置的路径,如果是这种情况,您有两个选择:
重新创建它
创建 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
另一种更简单的方式
- 搜索所有出现的字符串
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。
如果您在里面,请停用虚拟环境:
deactivate
更改 virtualenv python 符号 link:
ln -s /your/wanted/python/bin/python /your/virtualenv/bin/python
再次启动 virtualenv,它应该使用正确的 python 版本。
如果您不确定您的 python 在哪里,那么您可以通过以下方式对其进行本地化:
which python3
我遇到了类似的问题。但我拥有它是因为我已将我的 env 文件夹移动到另一个地方。所以,如果你这样做了,只需转到 bin 文件夹中的 activate file 并更改 VIRTUAL_ENV="CurrentPathToYourEnvFolder"(它是文件中的第 40 行)
我正在创建一个需要我使用 python2.7.6 的 Django 应用程序。我的系统安装了 python3.4.1,所以我必须使用安装了 python2.7 的 virtualenv。我使用 Pycharm 安装了这样一个 virtualenv 并将其命名为 django_python_2.7 但是当我在终端中激活它并 运行 "python" 时,它仍然显示它正在使用系统的 python3.4.1: 这是我所做的:
激活环境:
source django_python_2.7/bin/activate
运行
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 目录的任何父文件夹,那么这将破坏配置的路径,如果是这种情况,您有两个选择:
重新创建它
创建 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
另一种更简单的方式
- 搜索所有出现的字符串
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。
如果您在里面,请停用虚拟环境:
deactivate
更改 virtualenv python 符号 link:
ln -s /your/wanted/python/bin/python /your/virtualenv/bin/python
再次启动 virtualenv,它应该使用正确的 python 版本。
如果您不确定您的 python 在哪里,那么您可以通过以下方式对其进行本地化:
which python3
我遇到了类似的问题。但我拥有它是因为我已将我的 env 文件夹移动到另一个地方。所以,如果你这样做了,只需转到 bin 文件夹中的 activate file 并更改 VIRTUAL_ENV="CurrentPathToYourEnvFolder"(它是文件中的第 40 行)