Как правильно установить несколько неупакованных экосистем Distribute / virtualenv / pip в Ubuntu? - PullRequest
8 голосов
/ 25 июля 2011

Я занимаюсь разработкой приложений на 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-битного Python .

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

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

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

Ответы [ 3 ]

7 голосов
/ 29 июля 2011

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

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

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

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

Примечания:

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

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

user@computer:/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
user@computer:/media/work/environments/test$ 
0 голосов
/ 24 октября 2013

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

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

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

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

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

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

0 голосов
/ 24 октября 2013

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

http://virtualenvwrapper.readthedocs.org/

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

...