Warm tip: This article is reproduced from serverfault.com, please click

unix-virtualenv激活后,“ python”仍运行系统版本

(unix - "python" still runs the system version after virtualenv activate)

发布于 2016-12-06 20:02:50

我使用以下命令安装了Python 2.7

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

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

$ 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.
>>>

但是如果我激活它,它的指向2.6.6

cat /etc/redhat-release
CentOS release 6.6 (Final)

编辑:

我不确定为什么这行不通,但是我仍然可以在我的apache DJANGO应用程序中使用virtualenv,所以我不太担心

Questioner
Jabda
Viewed
0
ivan_pozdeev 2017-10-26 15:12:41

底线:

你已将“ python设置为外壳程序别名(可能是在你的外壳程序启动脚本中)。它会干扰virtualenv你替换键入“ python后将要运行的内容的工作删除别名,就可以了。

你也不需要在该Python安装中指定--python=/usr/local/bin/python2.7正在使用的'cuz virtualenv,因此默认情况下它已经在使用它。


WFM virtualenv 1.10.1::(请参见下面的猜测)

$ 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/pythonas python

  • python在你的情况下,因为是别名,并且activate 不使用别名-你必须在bash启动脚本中对其进行设置