"python" virtualenv激活后仍然运行系统版本
"python" still runs the system version after virtualenv activate
我使用这些命令安装了 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,所以我不太担心。
底线:
您已将“python
”设置为 shell 别名(可能在您的 shell 启动脚本中)。当您键入“python
”时,它会干扰 virtualenv
替换 运行 的工作。删除别名,就可以了。
您也不需要指定 --python=/usr/local/bin/python2.7
因为您正在使用 Python 安装中的 virtualenv
,所以它已经默认使用它。
WFM with 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
我的猜测是您正在使用为 /usr/local/bin/python2.7
安装的 virtualenv
。 这就是 "Already using..." 消息的原因.如果是这种情况,您不需要传递 --python
因为 virtualenv
已经默认使用它(检查它的 shebang)。
尽管如此,由于 virtualenv
创建了一个无版本可执行文件并且 activate
改变了 PATH
,您应该将 /var/python_venv/testbox/bin/python
作为 python
.
- 因为
python
是您的别名,并且 activate
不使用别名 - 您必须在 [=30] 中设置它=] 启动脚本。
如果你激活了你的 virtualenv 并且 which python
给你 /usr/bin/python
而不是 yourvirtualenv_path/bin/python
你可能在你的 .bashrc 中有一个 bash 别名或者.bash_aliases 个文件,和我一样。
修复步骤:
- 停用虚拟环境
- 检查 python 是 运行 的别名:
type python
- 找到您的 python 别名并将其从
~/.bash_aliases
或 ~/.bashrc
中删除
- 就我而言,我删除了
alias python='$(which python)' from ~/.bash_aliases
- 删除您的虚拟环境
- 刷新您的 .bash 文件:
source ~/.bashrc
和 source ~/.bash_aliases
- 重新创建 virtualenv
- 激活虚拟环境
- 运行:
which python
应该给出:yourvirtualenv_path/bin/python
如果你在 Windows,这似乎对我有用。
检查您的环境变量并将系统中的任何 Python 路径声明移动到用户环境变量。
您可能 moved/renamed 在 venv
路径上有一个文件夹。
venv/bin/activate
包含一个名为 VIRTUAL_ENV
的变量(用于在激活 venv
时更新路径)并且这可能具有对原始 [=11= 的硬编码引用] 位置。
VIRTUAL_ENV="/Users/<user-name>/<original-path>/venv"
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
当您 move/rename 文件夹时,过时的 VIRTUAL_ENV
路径会添加到您的 PATH
当您 activate
时。因此,python
的第一个匹配项将在 PATH
之后,第一个匹配项很可能是系统 python
.
您应该在 venv
文件夹中更新这些过时的硬编码路径。
我使用这些命令安装了 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,所以我不太担心。
底线:
您已将“python
”设置为 shell 别名(可能在您的 shell 启动脚本中)。当您键入“python
”时,它会干扰 virtualenv
替换 运行 的工作。删除别名,就可以了。
您也不需要指定 --python=/usr/local/bin/python2.7
因为您正在使用 Python 安装中的 virtualenv
,所以它已经默认使用它。
WFM with 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
我的猜测是您正在使用为 /usr/local/bin/python2.7
安装的 virtualenv
。 这就是 "Already using..." 消息的原因.如果是这种情况,您不需要传递 --python
因为 virtualenv
已经默认使用它(检查它的 shebang)。
尽管如此,由于 virtualenv
创建了一个无版本可执行文件并且 activate
改变了 PATH
,您应该将 /var/python_venv/testbox/bin/python
作为 python
.
- 因为
python
是您的别名,并且activate
不使用别名 - 您必须在 [=30] 中设置它=] 启动脚本。
如果你激活了你的 virtualenv 并且 which python
给你 /usr/bin/python
而不是 yourvirtualenv_path/bin/python
你可能在你的 .bashrc 中有一个 bash 别名或者.bash_aliases 个文件,和我一样。
修复步骤:
- 停用虚拟环境
- 检查 python 是 运行 的别名:
type python
- 找到您的 python 别名并将其从
~/.bash_aliases
或~/.bashrc
中删除
- 就我而言,我删除了
alias python='$(which python)' from ~/.bash_aliases
- 删除您的虚拟环境
- 刷新您的 .bash 文件:
source ~/.bashrc
和source ~/.bash_aliases
- 重新创建 virtualenv
- 激活虚拟环境
- 运行:
which python
应该给出:yourvirtualenv_path/bin/python
如果你在 Windows,这似乎对我有用。
检查您的环境变量并将系统中的任何 Python 路径声明移动到用户环境变量。
您可能 moved/renamed 在 venv
路径上有一个文件夹。
venv/bin/activate
包含一个名为 VIRTUAL_ENV
的变量(用于在激活 venv
时更新路径)并且这可能具有对原始 [=11= 的硬编码引用] 位置。
VIRTUAL_ENV="/Users/<user-name>/<original-path>/venv"
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
当您 move/rename 文件夹时,过时的 VIRTUAL_ENV
路径会添加到您的 PATH
当您 activate
时。因此,python
的第一个匹配项将在 PATH
之后,第一个匹配项很可能是系统 python
.
您应该在 venv
文件夹中更新这些过时的硬编码路径。