如何正确安装Python的pip、virtualenv和distribute?

250 投票
15 回答
159065 浏览
提问于 2025-04-16 07:52

简短问题

背景

在我对 SO问题4314376 的回答中,我推荐使用 ez_setup,这样你就可以按照以下方式安装 pipvirtualenv

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 目录干净,所以我在那里的唯一其他包是 virtualenvwrapperdistribute。(我最近因为 这个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的回应 让我回到了我最初的问题:

15 个回答

17

如果你按照我在这个回答中链接的几个教程步骤来做,你就能实现想要的效果,而不需要像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
21

我觉得Glyph的意思是要做以下这些事情:

  1. 如果还没有的话,创建一个目录 ~/.local
  2. 在你的 ~/.bashrc 文件中,确保 ~/.local/binPATH 里,并且 ~/.localPYTHONPATH 里。
  3. 创建一个文件 ~/.pydistutils.cfg,内容是:

    [install]
    prefix=~/.local
    

    这是一个标准的ConfigParser格式文件。

  4. 下载 distribute_setup.py,然后运行 python distribute_setup.py(不要加 sudo)。如果它提示找不到 site-packages 目录,你需要手动创建:

    mkdir -p ~/.local/lib/python2.7/site-packages/

  5. 运行 which easy_install 来确认它是来自 ~/.local/bin

  6. 运行 pip install virtualenv
  7. 运行 pip install virtualenvwrapper
  8. 创建一个虚拟环境的文件夹,比如 ~/.virtualenvs
  9. ~/.bashrc 文件中添加:

    export WORKON_HOME
    source ~/.local/bin/virtualenvwrapper.sh
    

就这些了,完全不需要使用 sudo,你的Python环境就在 ~/.local,和操作系统的Python完全分开。免责声明:不确定在这种情况下 virtualenvwrapper 的兼容性如何 - 我在我的系统上没法测试 :-)

173

你可以在不往 Python 本身里安装任何东西的情况下做到这一点。

你不需要使用 sudo 或者任何特权。

你也不需要编辑任何文件。

先在一个引导虚拟环境中安装 virtualenv。然后用这个虚拟环境来创建更多的虚拟环境。因为 virtualenv 自带 pip 和 distribute,所以你只需安装一次就能得到所有东西。

  1. 下载 virtualenv:
  2. 解压下载的文件
  3. 用解压后的文件创建一个干净的虚拟环境。这个虚拟环境将用来“引导”其他环境。你创建的所有虚拟环境都会自动包含 pip 和 distribute。
  4. 使用 pip 在这个引导环境中安装 virtualenv。
  5. 用这个引导环境来创建更多的虚拟环境!

下面是一个 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 就可以创建引导环境。

撰写回答