virtualenv 不包含 pip
virtualenv does not include pip
我正在尝试在 Mac OS X El Capitan 上使用 virtualenv
创建虚拟环境。我已经安装了 Python 2.7.11 和 brew
,默认情况下包括 pip
、wheel
和 setuptools
。
然而,当我尝试按照 documentation 或任何其他资源中的说明安装 virtualenv
时,我遇到了几个问题:
virtualenv
可执行文件在 pip
完成后没有放在 /usr/local/bin
中,所以我需要手动 ln -s
它(这可能表明,有这一步安装有问题)。
- 在我 运行
virtualenv venv
之后,它创建了新的环境,从 brew
安装中捕获了 Python 2.7.11,但是: 有bin
文件夹 中没有 pip
。这意味着,如果我尝试 which pip
,激活 venv
,它 returns 全局位置 pip
— /usr/local/bin/pip
,而不是 /path/to/venv/bin/pip
。
因此,在 venv
中安装软件包使用全局 pip
并将它们安装到全局 sites-packages
,而不是在 venv
中,这恰恰相反环境应该做什么。
能否请您提出可能存在的问题以及如何解决?
编辑:值得一提的是,我曾经在我的计算机上安装了其他版本的 Python,我最近删除了 in this answer 中描述的这些版本。可能是它导致了问题,需要进行更彻底的清洁。
virtualenv
executable is not placed in /usr/local/bin
after pip
makes its job, so I need to ln -s
it by hand (it may indicate, that there is something wrong with installation on this step).
不要那样做。那只会隐藏错误并不能解决问题。以下是如何调试此类问题的简短指南:
从 which -a python
开始。您看到的第一个路径应该是 /usr/local/bin/python
,如果不是请检查您的 PATH
变量。
接下来,检查which -a pip
。同样,第一个路径应该是 /usr/local/bin/pip
。如果不是,运行 python -m ensurepip
并重新检查。
现在使用 pip install virtualenv
安装 virtualenv
,然后检查 which -a virtualenv
的输出。第一个路径应该是 /usr/local/bin/virtualenv
,如果不是,请检查 env |grep PYTHON
的输出是否有意外的环境变量。
最后检查 virtualenv --version
的输出以确保您拥有最新版本。
尝试删除或重命名主目录中的 .pydistutils.cfg 文件,例如通过使用 mv ~/.pydistutils.cfg ~/oldpydistutils.cfg
重命名
我在这里给出一个详细的答案是为了帮助其他人,但最初的功劳归于 this answer。如果您知道 .pydistutils.cfg 中具体是什么导致了问题,请告诉我!
我遇到了同样的问题:我的虚拟环境是在没有 pip 本地副本的情况下创建的,尽管它们有 python 的本地副本。这意味着从安装到全局包位置的虚拟环境中使用 $ pip
,并且对环境的 python 不可见。
我是如何在我的机器上诊断这个的:
- 我用
$ virtualenv env
创建了一个虚拟环境
- 激活虚拟环境
$ source env/bin/activate
- 检查 python 位置:运行
(env)$ which python
输出 /Users/<username>/env/bin/python
(如预期)
- 已检查点位置:运行
(env)$ which pip
输出 /usr/local/bin/pip
(不期望)
要检查我们的包去哪里了,我们可以尝试在虚拟环境中安装一个包:
- 尝试安装包:
(env)$ pip install HTTPServer
成功
- 尝试 运行 包:
(env)$ python -m HTTPServer
失败并出现错误 /Users/emunsing/env/bin/python: No module named HTTPServer
- 要仔细检查,请再次尝试安装:
(env)$ pip install HTTPServer
生成 Requirement already satisfied (use --upgrade to upgrade): HTTPServer in /usr/local/lib/python2.7/site-packages
仔细检查,我们发现环境的 /bin 文件夹中没有 Pip:
$ ls env/bin
activate activate.fish python python2
activate.csh activate_this.py python-config python2.7
所以当系统找到本地python版本时,它找不到本地pip可以使用并遍历$PATH。它最终使用了来自 /usr/local/bin 的 pip,让我无法在本地将软件包安装到虚拟环境。
这是我尝试过的:
- 重新安装 python brew uninstall python
然后 brew upgrade
和 brew install python --build-from-source
- 安装 pip using the get-pip.py command as described in the Pip documentation
以下是我排除的情况:
- 我没有使用 sudo pip ...
which caused similar problems in this other question 也没有在这个 Python/pip 安装中使用过
- 我的虚拟环境没有显示 pip 的本地安装,就像这些类似问题中的情况一样:This one for Windows, This one for Mac OS X.
最终,我发现删除 ~/.pydistutils.cfg
文件可以解决问题,允许新的虚拟环境拥有自己的本地 pip。我的 ~/.pydistutils.cfg
文件的内容是:
[global]
verbose=1
[install]
install-scripts=$HOME/bin
[easy_install]
install-scripts=$HOME/bin
简单地重命名 ~/.pydistutils.cfg
文件似乎可以解决问题:尽管这个文件似乎是由自制程序安装创建的,some settings in this file may be incompatible with virtualenv. While removing this file hasn't had any bad effects on my system, you may need to use the --user
flag when installing packages with pip to the global environment (e.g. $ pip install --user HTTPServer
). Here are more details on .pydistutils.cfg 如果您想根据自己的需要对其进行定制。
我在 运行 virtualenv 时遇到了问题:"ImportError: No module named pip."
我的解决方案是降级 virtualenv。我有 16.2.0。
pip 卸载 virtualenv
pip 安装 virtualenv==15.1.0
我正在尝试在 Mac OS X El Capitan 上使用 virtualenv
创建虚拟环境。我已经安装了 Python 2.7.11 和 brew
,默认情况下包括 pip
、wheel
和 setuptools
。
然而,当我尝试按照 documentation 或任何其他资源中的说明安装 virtualenv
时,我遇到了几个问题:
virtualenv
可执行文件在pip
完成后没有放在/usr/local/bin
中,所以我需要手动ln -s
它(这可能表明,有这一步安装有问题)。- 在我 运行
virtualenv venv
之后,它创建了新的环境,从brew
安装中捕获了 Python 2.7.11,但是: 有bin
文件夹 中没有pip
。这意味着,如果我尝试which pip
,激活venv
,它 returns 全局位置pip
—/usr/local/bin/pip
,而不是/path/to/venv/bin/pip
。
因此,在 venv
中安装软件包使用全局 pip
并将它们安装到全局 sites-packages
,而不是在 venv
中,这恰恰相反环境应该做什么。
能否请您提出可能存在的问题以及如何解决?
编辑:值得一提的是,我曾经在我的计算机上安装了其他版本的 Python,我最近删除了 in this answer 中描述的这些版本。可能是它导致了问题,需要进行更彻底的清洁。
virtualenv
executable is not placed in/usr/local/bin
afterpip
makes its job, so I need toln -s
it by hand (it may indicate, that there is something wrong with installation on this step).
不要那样做。那只会隐藏错误并不能解决问题。以下是如何调试此类问题的简短指南:
从
which -a python
开始。您看到的第一个路径应该是/usr/local/bin/python
,如果不是请检查您的PATH
变量。接下来,检查
which -a pip
。同样,第一个路径应该是/usr/local/bin/pip
。如果不是,运行python -m ensurepip
并重新检查。现在使用
pip install virtualenv
安装virtualenv
,然后检查which -a virtualenv
的输出。第一个路径应该是/usr/local/bin/virtualenv
,如果不是,请检查env |grep PYTHON
的输出是否有意外的环境变量。最后检查
virtualenv --version
的输出以确保您拥有最新版本。
尝试删除或重命名主目录中的 .pydistutils.cfg 文件,例如通过使用 mv ~/.pydistutils.cfg ~/oldpydistutils.cfg
我在这里给出一个详细的答案是为了帮助其他人,但最初的功劳归于 this answer。如果您知道 .pydistutils.cfg 中具体是什么导致了问题,请告诉我!
我遇到了同样的问题:我的虚拟环境是在没有 pip 本地副本的情况下创建的,尽管它们有 python 的本地副本。这意味着从安装到全局包位置的虚拟环境中使用 $ pip
,并且对环境的 python 不可见。
我是如何在我的机器上诊断这个的:
- 我用
$ virtualenv env
创建了一个虚拟环境
- 激活虚拟环境
$ source env/bin/activate
- 检查 python 位置:运行
(env)$ which python
输出/Users/<username>/env/bin/python
(如预期) - 已检查点位置:运行
(env)$ which pip
输出/usr/local/bin/pip
(不期望)
要检查我们的包去哪里了,我们可以尝试在虚拟环境中安装一个包:
- 尝试安装包:
(env)$ pip install HTTPServer
成功 - 尝试 运行 包:
(env)$ python -m HTTPServer
失败并出现错误/Users/emunsing/env/bin/python: No module named HTTPServer
- 要仔细检查,请再次尝试安装:
(env)$ pip install HTTPServer
生成Requirement already satisfied (use --upgrade to upgrade): HTTPServer in /usr/local/lib/python2.7/site-packages
仔细检查,我们发现环境的 /bin 文件夹中没有 Pip:
$ ls env/bin
activate activate.fish python python2
activate.csh activate_this.py python-config python2.7
所以当系统找到本地python版本时,它找不到本地pip可以使用并遍历$PATH。它最终使用了来自 /usr/local/bin 的 pip,让我无法在本地将软件包安装到虚拟环境。
这是我尝试过的:
- 重新安装 python brew uninstall python
然后 brew upgrade
和 brew install python --build-from-source
- 安装 pip using the get-pip.py command as described in the Pip documentation
以下是我排除的情况:
- 我没有使用 sudo pip ...
which caused similar problems in this other question 也没有在这个 Python/pip 安装中使用过
- 我的虚拟环境没有显示 pip 的本地安装,就像这些类似问题中的情况一样:This one for Windows, This one for Mac OS X.
最终,我发现删除 ~/.pydistutils.cfg
文件可以解决问题,允许新的虚拟环境拥有自己的本地 pip。我的 ~/.pydistutils.cfg
文件的内容是:
[global]
verbose=1
[install]
install-scripts=$HOME/bin
[easy_install]
install-scripts=$HOME/bin
简单地重命名 ~/.pydistutils.cfg
文件似乎可以解决问题:尽管这个文件似乎是由自制程序安装创建的,some settings in this file may be incompatible with virtualenv. While removing this file hasn't had any bad effects on my system, you may need to use the --user
flag when installing packages with pip to the global environment (e.g. $ pip install --user HTTPServer
). Here are more details on .pydistutils.cfg 如果您想根据自己的需要对其进行定制。
我在 运行 virtualenv 时遇到了问题:"ImportError: No module named pip." 我的解决方案是降级 virtualenv。我有 16.2.0。 pip 卸载 virtualenv pip 安装 virtualenv==15.1.0