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

时间:2010-12-01 12:54:48

标签: python virtualenv setuptools distribute

简短问题

背景

my answerSO question 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的博文So you want to use Python on the Mac?中提取了这些说明。我喜欢保持一个干净的全局site-packages目录的想法,因此我安装的唯一其他软件包是virtualenvwrapperdistribute。 (由于distribute,我最近将this Python public service announcement添加到了我的工具箱。要安装这两个软件包,我使用了:

sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py

没有更多的setuptools和easy_install

要真正关注that Python public service announcement,在全新的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

雕文的Rebuke

my answerSO question 4314376的评论中,SO用户Glyph声明:

  

NO。从来没有sudo python setup.py install无论如何。写一个〜/ .pydistutils.cfg,将你的pip安装放到〜/ .local或其他东西。特别是名为ez_setup.py的文件往往会破坏setuptools和easy_install之类的新版本,这可能会破坏操作系统上的其他内容。

回到简短的问题

所以Glyph's response让我想到了原来的问题:

14 个答案:

答案 0 :(得分:172)

您可以在不将任何内容安装到python本身的情况下执行此操作。

您不需要sudo或任何特权。

您无需编辑任何文件。

将virtualenv安装到引导程序虚拟环境中。使用该虚拟环境创建更多。由于virtualenv随附pip和分发版,因此您可以从一次安装中获得所有内容。

  1. 下载virtualenv:
  2. 解压缩源tarball
  3. 使用解压缩的tarball创建一个干净的虚拟环境。这个虚拟环境将用于“引导”其他人。您的所有虚拟环境都将自动包含点子和分发。
  4. 使用pip,将virtualenv安装到该引导程序环境中。
  5. 使用该引导环境创建更多!
  6. 这是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
    

    现在您可以使用“bootstrap”环境创建更多:

    # 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-bootstrappython3 virtualenv.py path-to-bootstrap创建自举环境。

答案 1 :(得分:21)

我认为Glyph意味着做这样的事情:

  1. 创建目录~/.local(如果该目录尚不存在)。
  2. ~/.bashrc中,确保~/.local/binPATH,且~/.localPYTHONPATH
  3. 创建一个包含

    的文件~/.pydistutils.cfg
    [install]
    prefix=~/.local
    

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

  4. Download 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
    
  10. 就是这样,根本不使用sudo,你的Python环境在~/.local,完全独立于操作系统的Python。免责声明:不确定此方案中兼容性virtualenvwrapper - 我无法在我的系统上测试它: - )

答案 2 :(得分:16)

如果您按照我在this answer中链接的几个教程中建议的步骤,您就可以了 如果没有Walker和Vinay的答案中有些复杂的“手动”步骤,就可以获得理想的效果。如果您使用的是Ubuntu:

sudo apt-get install python-pip python-dev

通过使用自制软件安装python,在OS X中实现了等效(更多细节here)。

brew install python

安装pip后,您可以使用它来获取剩余的软件包(您可以在OS X中省略sudo,因为您正在使用本地python安装。)

sudo pip install virtualenvwrapper

(这些是您需要在全球范围内安装的唯一软件包,我怀疑它会与操作系统中的任何系统级别发生冲突。如果您想要超级安全,可以保留发行版的sudo apt-get install virtualenvwrapper

注意:在Ubuntu 14.04中我收到some errors with pip install,因此我使用pip3 install virtualenv virtualenvwrapper并将VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3添加到我的.bashrc/.zshrc文件中。

然后添加到您的.bashrc文件

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

并采购

. ~/.bashrc

基本上就是这样。现在唯一的决定是你是否想创建一个virtualenv来包含系统级包

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

结果是你有了一个新的virtualenv,你可以自由而无条件地安装你最喜欢的包

pip install flask

答案 3 :(得分:12)

Python 3.4以后

Python 3.3添加了venv module,Python 3.4添加了ensurepip module。这使得bootstrapping pip变得如此简单:

  

python -m ensurepip

在虚拟环境中调用venv之前可能会这样做。

PEP 453中描述了保证点。

答案 4 :(得分:10)

在Ubuntu上:

sudo apt-get install python-virtualenv

python-pip是一个依赖项,因此它也将被安装。

答案 5 :(得分:5)

我让这个程序供我们在工作中使用。

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.

安全意识的关键点:

  1. curl执行ssl验证。 wget没有。
  2. 从pip 1.3.1开始,pip也会进行ssl验证。
  3. 用户可以上传pypi tarball而不是github tarball。

答案 6 :(得分:5)

更新: 截至2013年7月,此项目已不再维护。作者建议使用pyenv。 (pyenv没有对virtualenv的内置支持,但是可以很好地使用它。)

Pythonbrew 是python的版本管理器,并且支持virtualenv。

使用venvs安装pythonbrew和python-version之后非常简单:

# Initializes the virtualenv 
pythonbrew venv init

# Create a virtual/sandboxed environment 
pythonbrew venv create mycoolbundle  

# Use it 
pythonbrew venv use mycoolbundle

答案 7 :(得分:3)

sudo python setup.py install没有问题,如果你确定它是你想做的。

不同之处在于它将使用操作系统的site-packages目录作为要复制的.py文件的目标。

所以,如果你想让pip可以被广泛访问,那可能就是这样。我不是说别人的方式不好,但这可能是公平的。

答案 8 :(得分:3)

Install ActivePython。它包括pip,virtualenv和Distribute。

答案 9 :(得分:2)

我最近遇到了同样的问题。我越来越偏向于“总是使用virtualenv”思维模式,所以我的问题是用pip安装virtualenv而不安装分发到我的全局或用户site-packages目录。为此,我手动下载了distribute,pip和virtualenv,并为每个运行“python setup.py install --prefix~ / .local / python-private”(临时设置为PYTHONPATH =〜/ .local / python-private)以便安装脚本能够找到分发)。我已将virtualenv脚本移动到我在PATH上的另一个目录并对其进行了编辑,以便可以在sys.path上找到distribute和virtualenv模块。 Tada:我没有在/ usr,/ usr / local或我的用户site-packages目录下安装任何东西,但是我可以在任何地方运行virtualenv,并且在那个virtualenv中我得到了pip。

答案 10 :(得分:2)

你可以这样做,而无需在python本身安装任何东西。 您不需要sudo或任何权限。 您无需查找virtualenv tar文件的最新版本 您无需在bash脚本中编辑版本信息以使其保持最新状态。 您不需要安装curl / wget或tar,也不需要pip或easy_install 这适用于2.7以及3.X 将以下内容保存到/tmp/initvenv.py: 来自未来的import print_function import os,sys,shutil,tempfile,subprocess,tarfile,hashlib 尝试:     来自urllib2 import urlopen 除了ImportError:     来自urllib.request import urlopen tmp_dir = tempfile.mkdtemp(prefix ='initvenv_') 尝试:     #从PyPI中读取最新版本     f = urlopen(“https://pypi.python.org/pypi/virtualenv/”)     #检索.tar.gz文件     tar_found =错误     url =无     sha256 =无     对于f.read()中的行,splitlines():         if isinstance(line,bytes):             line = line.decode('utf-8')         如果tar_found:             如果'sha256'排成一行:                 sha256 = line.split('data-clipboard-text')[1] .split('“')[1]                 打破             继续         如果没有tar_found和'tar.gz“>'不符合:             继续         tar_found =真         for line.split('“')中的url:             如果url.startswith('https'):                 打破     其他:         打印('找不到'tar.gz')         sys.exit(1)     file_name = url.rsplit('/',1)[1]     打印(FILE_NAME)     os.chdir(TMP_DIR)     data = urlopen(url).read()     data_sha256 = hashlib.sha256(data).hexdigest()     如果sha256!= data_sha256:         打印('sha256不正确')         打印(SHA256)         打印(data_sha256)         sys.exit(1)     使用open(file_name,'wb')作为fp:         fp.write(数据)     tar = tarfile.open(file_name)     tar.extractall()     tar.close()     os.chdir(file_name.replace('。tar.gz',''))     print(subprocess.check_output([sys.executable,'virtualenv.py'] +                                   [sys.argv [1]])。decode('utf-8'),end ='')     如果len(sys.argv)> 2:         打印(subprocess.check_output([             os.path.join(sys.argv [1],'bin','pip'),'install','virtualenv'] +             sys.argv [2:])。decode('utf-8'),end ='') 除了:     提高 最后:     shutil.rmtree(tmp_dir)#总是清理 并用它作为 python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [可选包] 例如(如果你真的需要setuptools的分布兼容层) python /tmp/initvenv.py venv distribute 请注意,对于较旧的python版本,这可能会为您提供InsecurePlatformWarnings¹。 一旦你拥有了virtualenv(名称为venv),你可以使用刚刚安装的virtualenv设置另一个virtualenv: venv / bin / virtualenv venv2 virtualenvwrapper 经过一次设置后,我建议您也看看virtualenvwrapper: %/opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper 和激活(可以从您的登录脚本完成): %source venv / bin / virtualenvwrapper.sh 你可以做以下事情: %mktmpenv tmp-17bdc3054a46b2b / bin / python中的新python可执行文件 安装setuptools,pip,wheel ......完成。 这是一个临时环境。运行“停用”时将删除它。 (TMP-17bdc3054a46b2b)% ¹我还没有办法抑制警告。它可以在pip和/或请求中解决,但开发人员指出彼此是原因。我得到了通常不现实的建议,将我使用的python版本升级到最新版本。我确信这会破坏我的Linux Mint 17安装。幸运的是pip缓存了包,因此发出了警告 每个包安装一次。

答案 11 :(得分:0)

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

基本上我所做的就是使用pip安装sudo easy_install pip,然后使用sudo pip install virtualenv然后创建一个环境:virtualenv my_env(将其命名为您想要的),然后我做了:virtualenv --distribute my_env;在我的virtualenv中安装了distributepip

再次按照virtualenv页面上的说明进行操作。

有点麻烦,来自Ruby; P

答案 12 :(得分:0)

这是安装virtualenvwrapper(更新this)的好方法。

下载virtualenv-1.11.4(您可以在here找到最新内容),解压缩,打开terminal

# Create a bootstrapenv and activate it:
$ cd ~
$ python <path to unzipped folder>/virtualenv.py bootstrapenv
$ source bootstrapenv/bin/activate

# Install virtualenvwrapper:
$ pip install virtualenvwrapper
$ mkdir -p ~/bootstrapenv/Envs

# append it to file `.bashrc`
$ vi ~/.bashrc
  source ~/bootstrapenv/bin/activate
  export WORKON_HOME=~/bootstrapenv/Envs
  source ~/bootstrapenv/bin/virtualenvwrapper.sh

# run it now.
$ source ~/.bashrc

就是这样,现在您可以使用mkvirtualenv env1lsvirtualenv ..等等

注意:您可以从下载文件夹中删除virtualenv-1.11.4virtualenv-1.11.4.zip

答案 13 :(得分:0)

好消息是如果你安装了python3.4,已经安装了pyvenv。所以,只是

pyvenv project_dir
source project_dir/bin/activate
python --version   
python 3.4.*

现在在这个虚拟环境中,您可以使用pip为该项目安装模块。

保留此虚拟环境,只需

deactivate