python virtualenv不使用正确版本的python

时间:2015-04-28 06:33:35

标签: python python-2.7 virtualenv

我正在创建一个需要我使用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中安装的那个

  3. 然而,当我运行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的路径?

7 个答案:

答案 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目录的任何父文件夹,则这将中断配置的路径,如果是这种情况,您有两个选择:

  1. 重新创建

    • 使用pip freeze > requirements.txt

    • 创建requirements.txt文件
    • 删除venv目录:rm -r old-vnev/

    • 使用正确的名称创建一个新的virtualenv:python -m venv new-venv
    • 激活新的virtualenv: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将再次按预期工作。

希望有帮助!

答案 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 版本。解决方案是用正确的符号链接替换符号链接。

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

    deactivate

  2. 更改 virtualenv python 符号链接:

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

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

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