我如何在Ubuntu上正确安装多个非包Distribute / virtualenv / pip生态系统?

我正在Ubuntu中开发Python应用程序。 我想设置Distribute / virtualenv / pip生态系统来独立于任何系统Python包(我在Synaptic中pipe理,或者让系统为我pipe理它们)来pipe理我的Python包。

我可以只安装python-setuptools,python-virtualenv和python-pip系统包,并且可以用我的快捷方式,但我也希望能够获得Distribute,virtualenv和pip的最新/特定版本。 这些没有PPA,所以我不得不手动安装它们。

最后一个复杂的是,我希望能够为多个版本的Python做到这一点。 也就是说,为python2.6build立一个生态系统,为pythonbuild立另一个生态系统,为python3build立另一个生态系统,或者在64位系统上为chrooted 32位Pythonbuild立另一个生态系统。

我猜测这个过程是这样的:

  • 使用Python X将我自己的Distribute副本安装到我的主文件夹中的位置
  • 使用独立分发,easy_install pip
  • 使用独立点,安装virtualenv
  • 使用独立virtualenv,创build虚拟环境
  • 激活虚拟环境,安装软件包
  • 对Python Y,Z和Q重复

我在找什么安装/configuration选项?

基于Walker Hale IV对类似(但是截然不同的)问题的回答,有两个关键要做到这一点:

  • 你不需要安装分发和点击,因为这些自动包含在一个新的虚拟环境(你可能只想要已经用virtualenv测试过的版本)
  • 您可以使用virtualenv源代码来创建新的虚拟环境,而不是使用系统安装的virtualenv版本

所以工作流程是:

  • 在你的系统上安装Python版本X.
  • 下载virtualenv源代码版本Q(可能是最新的)
  • 用Python X和virtualenv Q创建新的虚拟环境
  • 您的新VE现在正在运行Python X以及最新的pip和分发稳定版本
  • pip安装其他软件包
  • easy_install你无法安装的任何其他软件包

笔记:

  • 在新的虚拟环境中,您可以安装新的(或旧版本)发行版,pip或virtualenv。 (我认为)
  • 我不使用WH4的创建引导虚拟环境的技术。 相反,我每次都从virtualenv源创建新的虚拟环境。
  • 这种技术应该可以在任何操作系统上使用。
  • 如果我正在向一个新的分布/ pip / virtualenv生态系统概念的人解释这一点,我会以一种虚拟中心的方式来解释它。

我已经写了一个bash脚本,在Ubuntu中做了一些基本的操作:

#! /bin/bash # Script to create a python virtual environment # independently of the system version of virtualenv # # Ideally this would be a cross-platform Python # script with more validation and fewer TODOs, # but you know how it is. # = PARAMETERS = # $1 is the python executable to use # examples: python, python2.6, /path/to/python # $2 is the new environment folder # example: /path/to/env_folder/name ## TODO: should be just a name ## but I can't concatenate strings in bash # $3 is a pip requirements file # example: /path/to/req_folder/name.txt # you must uncomment the relevant code below to use $3 ## TODO: should be just a name ## but I can't concatenate strings in bash # other parameters are hard-coded below # and you must change them before first use # = EXAMPLES OF USE = # . env_create python2.5 /home/env/legacy ## creates environment "legacy" using python 2.5 # . env_create python /home/env/default ## creates environment "default" using whatever version of python is installed # . env_create python3.2 /home/env/bleeding /home/req/testing.txt ## creates environment "bleeding" using python 3.2 and installs packages from testing.txt using pip # = SET UP VARIABLES = # Required version of virtualenv package VERSION=1.6.4 # Folder to store your virtual environments VE_FOLDER='/media/work/environments' ## TODO: not used because I can't concatenate strings in bash # Folder to store bootstrap (source) versions of virtualenv BOOTSTRAP_FOLDER='/media/work/environments/bootstrap' ## TODO: not used because I can't concatenate strings in bash # Folder to store pip requirements files REQUIREMENTS_FOLDER='/media/work/environments/requirements' ## TODO: not used because I can't concatenate strings in bash # Base URL for downloading virtualenv source URL_BASE=http://pypi.python.org/packages/source/v/virtualenv # Universal environment options ENV_OPTS='--no-site-packages --distribute' # $1 is the python interpreter PYTHON=$1 # $2 is the target folder of the new virtual environment VE_TARGET=$2 # $3 is the pip requirements file REQ_TARGET=$3 ## = DOWNLOAD VIRTUALENV SOURCE = ## I work offline so I already have this downloaded ## and I leave this bit commented out # cd $BOOTSTRAP_DIR # curl -O $URL_BASE/virtualenv-$VERSION.tar.gz ## or use wget # = CREATE NEW ENV USING VIRTUALENV SOURCE = cd $BOOTSTRAP_FOLDER tar xzf virtualenv-$VERSION.tar.gz # Create the environment $PYTHON virtualenv-$VERSION/virtualenv.py $ENV_OPTS $VE_TARGET # Don't need extracted version anymore rm -rf virtualenv-$VERSION # Activate new environment cd $VE_TARGET . bin/activate # = INSTALL A PIP REQUIREMENTS FILE = ## uncomment this if you want to automatically install a file # pip install -r $REQ_TARGET # = REPORT ON THE NEW ENVIRONMENT = python --version pip freeze # deactivate ## uncomment this if you don't want to start in your environment immediately 

输出看起来像这样(下载关闭和停用打开):

用户@电脑:/ home / user $。  env_create python3 / media / work / environments / test
 / media / work / environments / test / bin / python3中的新的python可执行文件
还可以在/ media / work / environments / test / bin / python中创建可执行文件
安装分发...............完成。
安装pip ...............完成。
 Python 3.2
分发== 0.6.19
 ==的wsgiref 0.1.2
用户@电脑:/媒体/工作/环境/测试$ 

正如@jfsebastian所指出的那样,virtualenvwrapper完成了你要求的大部分或全部功能。

http://virtualenvwrapper.readthedocs.org/

virtualenvwrapper是Ian Bicking的virtualenv工具的一组扩展。 这些扩展包括用于创建和删除虚拟环境的包装,以及管理您的开发工作流程,使得一次处理多个项目更容易,而不会在其依赖关系中引入冲突。

在阐述JF Sebastian和nealmcb的贡献的时候,我确实使用了我的系统打包的virtualenvwrapper版本(在Ubuntu 12.04和更高版本上可用)。

virtualenvwrapper是Ian Bicking的virtualenv工具的一组扩展。 这些扩展包括用于创建和删除虚拟环境的包装,以及管理您的开发工作流程,使得一次处理多个项目更容易,而不会在其依赖关系中引入冲突。

我使用的主要功能(回答这个问题)是:

  • mkvirtualenv --python=PYTHON_EXE使用特定的Python可执行文件创建一个virtualenv(不一定是系统打包的版本)
  • 配合pip的virtualenv支持
  • allvirtualenv pip install -U pip升级所有的virtualenvs点

提到的JFS提供的环境变量确实有用:PIP_DOWNLOAD_CACHE,VIRTUALENV_USE_DISTRIBUTE,WORKON_HOME,VIRTUALENVWRAPPER_PYTHON。

更新virtualenv本身的唯一原因是获取最新版本的setuptools(以前称为Distribute,以前称为setuptools)。 我还没有需要这样做,但是我怀疑从一个全新的virtualenv开始,先升级Distribute / setuptools,然后升级pip,然后安装其他的库是最简单的。

如果严格需要新版本的virtualenv,则应对引导脚本进行修改。