Как я могу правильно установить несколько непакетных распределений /virtualenv/pip экосистем на Ubuntu?

Я разрабатываю приложения Python в Ubuntu. Я хочу настроить Distribute/virtualenv/pip экосистему для управления моими пакетами Python независимо от любых пакетов системы Python (которыми я управляю в Synaptic, а точнее Я позволяю системе управлять ими для меня).

Я мог бы просто установить системные пакеты python-setuptools, python-virtualenv и python-pip и быть на мой веселье, но я также хочу получить последние/конкретные версии Distribute, virtualenv и pip. Для них нет PPA, поэтому мне придется установить их вручную.

Последнее осложнение заключается в том, что я хочу иметь возможность сделать это для нескольких версий Python. То есть, настроена одна экосистема для python2.6, другая для python, другая для python3 или в 64-битной системе другая для chrooted 32-bit Python.

Я предполагаю, что процесс будет примерно таким:

  • Используя Python X, установите мою собственную копию Distribute to location в моей домашней папке
  • Использование indie Distribute, easy_install pip
  • Использование indie pip, установка virtualenv
  • Использование indie virtualenv, создание виртуальной среды
  • Активировать виртуальную среду, установить пакеты
  • Повторить для Python Y, Z и Q

Какие параметры установки/конфигурации я ищу?

Ответ 1

Разрабатывая вклад JF Sebastian и nealmcb, в наши дни я действительно использую свою системную упаковку virtualenvwrapper (доступно на Ubuntu 12.04 и позже).

virtualenvwrapper - это набор расширений для инструмента Ian Bickings virtualenv. Расширения включают в себя оболочки для создания и удаления виртуальных сред и, в противном случае, управление рабочим процессом разработки, что упрощает работу над несколькими проектами одновременно, не внося конфликтов в их зависимости.

Ключевыми функциями, которые я использую (в ответ на этот вопрос), являются:

Указанные здесь переменные среды JFS действительно полезны для скриптов: PIP_DOWNLOAD_CACHE, VIRTUALENV_USE_DISTRIBUTE, WORKON_HOME, VIRTUALENVWRAPPER_PYTHON.

Единственная причина для обновления самого virtualenv - получить последнюю версию setuptools (ранее называемую Distribute, ранее известную как setuptools). Мне еще не нужно было это делать, но я подозреваю, что было бы проще начать с нового виртуального сервера и сначала обновить дистрибутив /setuptools, а затем обновить pip, а затем установить другие библиотеки.

Если необходима новая версия virtualenv, необходимо сделать модификацию загрузочного файла script.

Ответ 2

Основываясь на Ответ Walker Hale IV на аналогичный (но отличный!;)) вопрос, есть два ключа для этого:

  • вам не нужно устанавливать дистрибутив и пипс, потому что они автоматически включаются в новую виртуальную среду (и вы, по-видимому, хотите только версии, которые были протестированы с помощью virtualenv).
  • вы можете использовать исходный код virtualenv для создания новой виртуальной среды, а не использовать системную версию virtualenv

Итак, рабочий процесс:

  • установите версию Python X в вашей системе
  • скачать виртуальный файл версии версии Q (возможно, последний)
  • создать новую виртуальную среду с помощью Python X и virtualenv Q
  • ваш новый VE теперь запускает Python X и последние стабильные версии pip и распространяет
  • pip установить любые другие пакеты
  • easy_install любые другие пакеты, которые вы не можете установить с помощью pip

Примечания:

  • В вашей новой виртуальной среде вы можете установить новые (или старые) версии распространения, pip или virtualenv. (Я думаю)
  • Я не использую технологию WH4 для создания загрузочной виртуальной среды. Вместо этого я каждый раз создаю новую виртуальную среду из источника virtualenv.
  • Этот метод должен использоваться в любой операционной системе.
  • Если бы я объяснял это кому-то новому для всей концепции Distribute/pip/virtualenv, я бы объяснил это виртуально-ориентированным способом.

Я написал bash script, который основывает 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

Результат выглядит примерно так (при включенной загрузке и отключении):

[email protected]:/home/user$ . env_create python3 /media/work/environments/test
New python executable in /media/work/environments/test/bin/python3
Also creating executable in /media/work/environments/test/bin/python
Installing distribute...............done.
Installing pip...............done.
Python 3.2
distribute==0.6.19
wsgiref==0.1.2
[email protected]:/media/work/environments/test$ 

Ответ 3

Как отмечено @j.f.sebastian, virtualenvwrapper делает много или все, о чем вы просите.

http://virtualenvwrapper.readthedocs.org/

virtualenvwrapper - это набор расширений для Ian Bickings virtualenv инструмент. Расширения включают в себя обертки для создания и удаления виртуальных средах и иным образом управляя процессом разработки, что упрощает работу над несколькими проектами одновременно без вводя конфликты в их зависимости.