我正在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立另一个生态系统。
我猜测这个过程是这样的:
我在找什么安装/configuration选项?
基于Walker Hale IV对类似(但是截然不同的)问题的回答,有两个关键要做到这一点:
所以工作流程是:
笔记:
我已经写了一个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(不一定是系统打包的版本) 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,则应对引导脚本进行修改。