短的问题

安装pip、virtualenv和分发的正确方法是什么?

背景

在我对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公共服务公告,我最近把分发添加到我的工具箱中。为了安装这两个包,我使用了:

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

字形的责备

在我对SO问题4314376的回答的评论中,SO用户Glyph表示:

不。永远不要使用sudo python setup.py安装任何东西。编写~/.pydistutils.cfg文件,将pip安装放在~/目录下。本地的或者其他的。特别是名为ez_setup.py的文件往往会占用setuptools和easy_install等新版本的东西,这可能会破坏操作系统上的其他东西。

回到那个简短的问题

所以,Glyph的回答让我想到了我最初的问题:

安装pip、virtualenv和分发的正确方法是什么?


当前回答

Virtualenv官方网站上有很好的说明。https://pypi.python.org/pypi/virtualenv

基本上我所做的,是用sudo easy_install pip安装pip,然后使用sudo pip安装virtualenv,然后用:virtualenv my_env(你想要的名字)创建一个环境,然后我做了:virtualenv—分发my_env;在我的virtualenv中安装了分发和PIP。

同样,按照virtualenv页面上的说明操作。

有点麻烦,来自Ruby;P

其他回答

I came across the same problem recently. I’m becoming more partial to the “always use a virtualenv” mindset, so my problem was to install virtualenv with pip without installing distribute to my global or user site-packages directory. To do this, I manually downloaded distribute, pip and virtualenv, and for each one I ran “python setup.py install --prefix ~/.local/python-private” (with a temporary setting of PYTHONPATH=~/.local/python-private) so that setup scripts were able to find distribute). I’ve moved the virtualenv script to another directory I have on my PATH and edited it so that the distribute and virtualenv modules can be found on sys.path. Tada: I did not install anything to /usr, /usr/local or my user site-packages dir, but I can run virtualenv anywhere, and in that virtualenv I get pip.

我做了这个程序,在工作中使用。

cd ~
curl -s https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz | tar xvz
cd pip-1.3.1
python setup.py install --user
cd ~
rm -rf pip-1.3.1

$HOME/.local/bin/pip install --user --upgrade pip distribute virtualenvwrapper

# Might want these three in your .bashrc
export PATH=$PATH:$HOME/.local/bin
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS="--distribute"
source $HOME/.local/bin/virtualenvwrapper.sh

mkvirtualenv mypy
workon mypy
pip install --upgrade distribute
pip install pudb # Or whatever other nice package you might want.

安全意识的要点:

Curl执行SSL验证。wget没有。 从pip 1.3.1开始,pip还进行ssl验证。 可以上传pypi tarball的用户比上传github tarball的用户少。

我在安装升级的SSL模块时遇到了各种问题(见下文),甚至是在virtualenv中,在旧的操作系统提供的Python版本上安装,所以我现在使用pyenv。

pyenv使得安装新的Python版本非常容易,并支持virtualenv。入门比其他答案中列出的virtualenv食谱容易得多:

在Mac上,输入brew install pyenv,在Linux上,使用pyenv installer 这为你提供了内置的virtualenv支持以及Python版本切换(如果需要) 适用于python2或python3,可以同时安装多个版本

这可以很好地将“新Python”版本和virtualenv与系统Python隔离开来。因为你可以很容易地使用最新的Python(2.7.9之后),SSL模块已经升级了,当然,像任何现代的virtualenv设置一样,你与系统Python模块是绝缘的。

一些不错的教程:

使用pyenv和virtualenv——在选择Python版本时,使用pyenv global 3.9.1(对当前用户来说是全局的)或pyenv local 3.6.3(对当前目录来说是本地的)更容易。 Pyenv基础知识,并与virtualenv一起使用

pyenv-virtualenv插件现在是内置的- type pyenv命令| grep virtualenv检查。我不会一开始就使用pyenv- virtualenenv插件——看看你如何使用pyenv-virtualenv插件,它更集成到pyenv中,因为它涵盖了virtualenvwrapper所做的大部分工作。

pyenv是基于rbenv(一种用于Ruby版本切换的好工具)建模的,它唯一依赖的是bash。

pyenv与名称非常相似的pyvenv无关——pyvenv是一个虚拟的env,是最近Python 3版本的一部分,并且不处理Python版本切换

警告

关于pyenv的两个警告:

它只能从bash或类似的shell中工作-或者更具体地说,pyenv-virtualenv插件不喜欢dash,它在Ubuntu或Debian上是/bin/sh。 它必须从交互式登录shell运行(例如bash—使用终端登录),这并不总是容易实现自动化工具,如Ansible。

因此,pyenv最适合交互使用,不太适合脚本服务器。

旧的发行版—SSL模块问题

使用pyenv的一个原因是,在使用较旧的系统提供的Python版本时,升级Python SSL模块经常会出现问题。由于当前的Linux发行版支持Python 3.x,这可能不是什么问题。

Python 3.4开始

Python 3.3增加了venv模块,Python 3.4增加了ensurepip模块。这使得bootstrapping像下面这样简单:

Python -m ensurepip

可能在虚拟环境中调用venv来执行此操作。

PEP 453中描述了保证pip。

我认为Glyph的意思是这样做:

Create a directory ~/.local, if it doesn't already exist. In your ~/.bashrc, ensure that ~/.local/bin is on PATH and that ~/.local is on PYTHONPATH. Create a file ~/.pydistutils.cfg which contains [install] prefix=~/.local It's a standard ConfigParser-format file. Download distribute_setup.py and run python distribute_setup.py (no sudo). If it complains about a non-existing site-packages directory, create it manually: mkdir -p ~/.local/lib/python2.7/site-packages/ Run which easy_install to verify that it's coming from ~/.local/bin Run pip install virtualenv Run pip install virtualenvwrapper Create a virtual env containing folder, say ~/.virtualenvs In ~/.bashrc add export WORKON_HOME source ~/.local/bin/virtualenvwrapper.sh

就是这样,根本不用sudo,你的Python环境在~/中。本地,完全独立于操作系统的Python。免责声明:不确定在这种情况下virtualenvwrapper的兼容性如何-我无法在我的系统上测试它:-)