在virtualenv激活后,“python”仍然运行系统版本

时间:2016-12-06 20:02:50

标签: python unix virtualenv

我使用这些命令安装了Python 2.7

only_full_group_by

然后我创建了teh virtualenv以指向2.7安装

./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall

但如果我激活它指向2.6.6

$ virtualenv --python=/usr/local/bin/python2.7 testbox
Already using interpreter /usr/local/bin/python2.7
New python executable in /var/python_venv/testbox/bin/python2.7
Also creating executable in /var/python_venv/testbox/bin/python
Installing setuptools, pip, wheel...done.
$ source testbox/bin/activate
(testbox) $ python
Python 2.6.6 ( , Aug 18 2016, 15:13:37)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

编辑:

我不确定为什么这不起作用,但我仍然可以在我的apache DJANGO app中使用virtualenv,所以我不太关心

4 个答案:

答案 0 :(得分:3)

另一种可能是您移动/重命名了 venv 路径上的文件夹。

venv/bin/activate 包含一个名为 VIRTUAL_ENV 的变量(用于在激活 venv 时更新路径)并且这可能具有对原始 venv 位置的硬编码引用.

VIRTUAL_ENV="/Users/<user-name>/<original-path>/venv"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

当您移动/重命名文件夹时,过时的 VIRTUAL_ENV 路径会在您 PATH 时添加到您的 activate。因此,python 的第一个匹配项将位于 PATH 的更下方,并且第一个匹配项很可能是系统 python

您应该更新 venv 文件夹中这些过时的硬编码路径。

答案 1 :(得分:2)

底线:

您已将“python”设置为shell别名(可能在您的shell启动脚本中)。它会干扰virtualenv替换键入“python”时要运行的内容的工作。删除别名,你很好。

您也不需要指定--python=/usr/local/bin/python2.7'因为您在Python安装中使用virtualenv,所以默认情况下它已经使用了它。

virtualenv 1.10.1的WFM :(请参阅下面的进一步猜测)

$ virtualenv --python=/usr/local/bin/python2.7 testbox
Running virtualenv with interpreter /usr/local/bin/python2.7
New python executable in testbox/bin/python2.7
Also creating executable in testbox/bin/python
Installing Setuptools.........................................done.
Installing Pip................................................done.
$ ls -l testbox/bin/
total 40
-rw-r--r--. 1 root root 2194 Dec  7 03:06 activate
-rw-r--r--. 1 root root 1250 Dec  7 03:06 activate.csh
-rw-r--r--. 1 root root 2389 Dec  7 03:06 activate.fish
-rw-r--r--. 1 root root 1129 Dec  7 03:06 activate_this.py
-rwxr-xr-x. 1 root root  332 Dec  7 03:06 easy_install
-rwxr-xr-x. 1 root root  340 Dec  7 03:06 easy_install-2.7
-rwxr-xr-x. 1 root root  293 Dec  7 03:06 pip
-rwxr-xr-x. 1 root root  301 Dec  7 03:06 pip-2.7
lrwxrwxrwx. 1 root root    9 Dec  7 03:06 python -> python2.7
lrwxrwxrwx. 1 root root    9 Dec  7 03:06 python2 -> python2.7
-rwxr-xr-x. 1 root root 7788 Dec  7 03:06 python2.7

activate所做的主要是:

PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

我的猜测是您正在使用为virtualenv安装的/usr/local/bin/python2.7 这就是“已经使用...”消息的原因。如果是这种情况,则不需要传递--python,因为默认情况下virtualenv已经使用它(请查看它的shebang)。

但是,由于virtualenv创建了无版本的可执行文件而activate更改了PATH,因此您应该/var/python_venv/testbox/bin/pythonpython

  • 由于python在您的情况下是别名,并且activate 不使用别名 - 您必须在bash启动脚本中设置它。

答案 2 :(得分:1)

如果您使用的是 Windows ,那么这似乎对我有用。

检查环境变量并将系统中的所有Python路径声明移至用户环境变量。

答案 3 :(得分:0)

如果您激活了virtualenv,并且which python给了/usr/bin/python而不是yourvirtualenv_path/bin/python,则您的.bashrc或.bash_aliases文件中可能会像我一样拥有bash别名。

修复它的步骤:

  1. 停用虚拟环境
  2. 要检查要运行的python别名,请执行以下操作:type python
  3. 找到您的python别名,然后将其从~/.bash_aliases~/.bashrc
  4. 中删除
  5. 就我而言,我删除了alias python='$(which python)' from ~/.bash_aliases
  6. 删除虚拟环境
  7. 刷新您的.bash文件:source ~/.bashrcsource ~/.bash_aliases
  8. 重新创建virtualenv
  9. 激活virtualenv
  10. 运行:which python应该给出:yourvirtualenv_path/bin/python