我正在创建一个需要我使用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 ..为什么在virtualenv中运行一个简单的“python”命令仍然默认为系统的python?
有人能提供一些提示吗?是否有必要更改PATH
变量以使其包含virtualenv的python的路径?
答案 0 :(得分:4)
如果您想更改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
答案 1 :(得分:1)
我发现了同样的问题...
就像提到的@ skyline75489一样:
我忘记了我之前为python3可执行文件声明了别名。
我在主目录的.bash文件中找到了它并将其删除。
在我的虚拟环境中,一切都恢复正常了。
答案 2 :(得分:0)
仔细检查您的路径。我最近遇到这样的问题,从激活的virtualenv中运行which python
仍会返回默认系统版本(/usr/bin/python
)。但是,如果我运行脚本从virtualenv内部直接指定二进制文件(./venv/bin/python
等),它会按预期工作,因此看来所有依赖项都已正确安装。
问题是我在构建所有内容后将父virtualenv目录移动了 。这意味着所有virtualenv路径都指向不再有效的原始位置,并且python正确地默认为默认系统二进制文件。
答案 3 :(得分:0)
万一它对其他人有帮助:如果您更改了venv
文件夹的路径(例如更改了父文件夹),则会发生这种情况。这是我的问题。
重新创建您的virtualenv可以解决该问题,因为您应该创建一个requirements.txt
来重建您的virtualenv。
这甚至可能是OP的根本原因。
答案 4 :(得分:0)
如果您将路径更改为venv
或重命名了venv目录的任何父文件夹,则这将中断配置的路径,如果是这种情况,您有两个选择:
重新创建
使用pip freeze > requirements.txt
删除venv目录:rm -r old-vnev/
python -m venv new-venv
source new-venv/bin/activate
pip install -r requirements.txt
另一种简单的方法
old/path/to/your/venv/
correct/path/to/your/venv/
替换它们之后,source new-venv/bin/activate
将再次按预期工作。
希望有帮助!
答案 5 :(得分:0)
我这样使用bash
脚本:
$ source venv/bin/activate
$ alias vpython=$VIRTUAL_ENV/bin/python3
,并想在虚拟环境中使用python可执行文件时使用vpython
。在python
中使用以下方法检查您实际上是哪个可执行文件的一种好方法:
>>> import sys
>>> print(f'executable \033[0;33;40m{sys.executable}\033[0m')
答案 6 :(得分:0)
在我的情况下,来自 virtualenv 的系统更新符号链接不知何故损坏并切换到默认系统 python 版本。解决方案是用正确的符号链接替换符号链接。
如果您在里面,请停用虚拟环境:
deactivate
更改 virtualenv python 符号链接:
ln -s /your/wanted/python/bin/python /your/virtualenv/bin/python
再次启动 virtualenv,它应该使用正确的 python 版本。
如果您不确定您的 python 在哪里,那么您可以通过以下方式对其进行本地化:
which python3