如何正确安装Python的pip、virtualenv和distribute?
简短问题
- 安装
pip
、virtualenv
和distribute
的正确方法是什么?
背景
在我对 SO问题4314376 的回答中,我推荐使用 ez_setup
,这样你就可以按照以下方式安装 pip
和 virtualenv
:
curl -O http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
sudo easy_install pip
sudo pip install virtualenv
这些说明最初是我从 Jesse Noller 的博客文章 你想在Mac上使用Python吗? 中获取的。我喜欢保持全局的 site-packages 目录干净,所以我在那里的唯一其他包是 virtualenvwrapper
和 distribute
。(我最近因为 这个Python公共服务公告 将 distribute
加入了我的工具箱。要安装这两个包,我使用了:
sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
不再使用 setuptools 和 easy_install
为了真正遵循 那个Python公共服务公告,在全新安装的Python上,我会这样做:
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
sudo easy_install pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper
Glyph的反驳
在对我回答的评论中,SO用户 Glyph 表示:
不!绝对不要使用
sudo python setup.py install
之类的命令。写一个 ~/.pydistutils.cfg 文件,把你的 pip 安装放到 ~/.local 或其他地方。特别是像ez_setup.py
这样的文件往往会下载更新版本的 setuptools 和 easy_install,这可能会破坏你操作系统上的其他东西。
回到简短问题
所以 Glyph的回应 让我回到了我最初的问题:
- 安装
pip
、virtualenv
和distribute
的正确方法是什么?
15 个回答
如果你按照我在这个回答中链接的几个教程步骤来做,你就能实现想要的效果,而不需要像Walker和Vinay的回答中那样复杂的“手动”步骤。如果你在使用Ubuntu:
sudo apt-get install python-pip python-dev
在OS X上,你可以通过使用homebrew来安装python,具体细节可以在这里找到。
brew install python
安装好pip
后,你可以用它来获取剩下的包(在OS X上,你可以省略sudo
,因为你是在使用本地的python安装)。
sudo pip install virtualenvwrapper
(这些是你需要全局安装的唯一包,我怀疑它会和操作系统的任何系统级别的东西冲突。如果你想更安全一点,可以保留发行版的版本,使用sudo apt-get install virtualenvwrapper
)
注意:在Ubuntu 14.04上,我在使用pip install
时遇到了一些错误,所以我使用pip3 install virtualenv virtualenvwrapper
,并在我的.bashrc/.zshrc
文件中添加VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
。
然后你需要在你的.bashrc
文件中添加以下内容
export WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh
然后执行这个文件
. ~/.bashrc
基本上就是这样。现在唯一需要决定的是你是否想创建一个虚拟环境来包含系统级别的包
mkvirtualenv --system-site-packages foo
这样你现有的系统包就不需要重新安装,它们会链接到系统解释器的版本。注意:你仍然可以在不使用sudo的情况下安装新包和升级现有的系统包,我测试过,系统解释器不会受到任何干扰。
kermit@hocus-pocus:~$ sudo apt-get install python-pandas
kermit@hocus-pocus:~$ mkvirtualenv --system-site-packages s
(s)kermit@hocus-pocus:~$ pip install --upgrade pandas
(s)kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.10.1
(s)kermit@hocus-pocus:~$ deactivate
kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.8.0
如果你想要一个完全独立的环境,另一种选择是
mkvirtualenv --no-site-packages bar
或者因为这是默认选项,你可以简单地
mkvirtualenv bar
结果就是你有了一个新的虚拟环境,在这里你可以自由地安装你喜欢的包,而不需要使用sudo。
pip install flask
我觉得Glyph的意思是要做以下这些事情:
- 如果还没有的话,创建一个目录
~/.local
。 - 在你的
~/.bashrc
文件中,确保~/.local/bin
在PATH
里,并且~/.local
在PYTHONPATH
里。 创建一个文件
~/.pydistutils.cfg
,内容是:[install] prefix=~/.local
这是一个标准的ConfigParser格式文件。
下载
distribute_setup.py
,然后运行python distribute_setup.py
(不要加sudo
)。如果它提示找不到site-packages
目录,你需要手动创建:mkdir -p ~/.local/lib/python2.7/site-packages/
运行
which easy_install
来确认它是来自~/.local/bin
- 运行
pip install virtualenv
- 运行
pip install virtualenvwrapper
- 创建一个虚拟环境的文件夹,比如
~/.virtualenvs
在
~/.bashrc
文件中添加:export WORKON_HOME source ~/.local/bin/virtualenvwrapper.sh
就这些了,完全不需要使用 sudo
,你的Python环境就在 ~/.local
,和操作系统的Python完全分开。免责声明:不确定在这种情况下 virtualenvwrapper
的兼容性如何 - 我在我的系统上没法测试 :-)
你可以在不往 Python 本身里安装任何东西的情况下做到这一点。
你不需要使用 sudo 或者任何特权。
你也不需要编辑任何文件。
先在一个引导虚拟环境中安装 virtualenv。然后用这个虚拟环境来创建更多的虚拟环境。因为 virtualenv 自带 pip 和 distribute,所以你只需安装一次就能得到所有东西。
- 下载 virtualenv:
- 解压下载的文件
- 用解压后的文件创建一个干净的虚拟环境。这个虚拟环境将用来“引导”其他环境。你创建的所有虚拟环境都会自动包含 pip 和 distribute。
- 使用 pip 在这个引导环境中安装 virtualenv。
- 用这个引导环境来创建更多的虚拟环境!
下面是一个 bash 的示例:
# Select current version of virtualenv:
VERSION=12.0.7
# Name your first "bootstrap" environment:
INITIAL_ENV=bootstrap
# Set to whatever python interpreter you want for your first environment:
PYTHON=$(which python)
URL_BASE=https://pypi.python.org/packages/source/v/virtualenv
# --- Real work starts here ---
curl -O $URL_BASE/virtualenv-$VERSION.tar.gz
tar xzf virtualenv-$VERSION.tar.gz
# Create the first "bootstrap" environment.
$PYTHON virtualenv-$VERSION/virtualenv.py $INITIAL_ENV
# Don't need this anymore.
rm -rf virtualenv-$VERSION
# Install virtualenv into the environment.
$INITIAL_ENV/bin/pip install virtualenv-$VERSION.tar.gz
现在你可以用你的“引导”环境来创建更多的虚拟环境:
# Create a second environment from the first:
$INITIAL_ENV/bin/virtualenv py-env1
# Create more:
$INITIAL_ENV/bin/virtualenv py-env2
尽情发挥吧!
注意
这里假设你没有使用非常旧的 virtualenv 版本。旧版本需要使用 --no-site-packges
这个参数(根据 Python 的版本,可能还需要 --distribute
)。现在你只需用 python virtualenv.py path-to-bootstrap
或者 python3 virtualenv.py path-to-bootstrap
就可以创建引导环境。