2011-07-25 26 views
8

Zajmuję się tworzeniem aplikacji Python w Ubuntu. Chcę skonfigurować Distribute/virtualenv/pip ecosystem do zarządzania pakietami Python niezależnie od pakietów systemowych Python (którymi zarządzam w Synaptic, a raczej pozwalam systemowi zarządzać nimi dla mnie).Jak mogę poprawnie zainstalować wiele nie-pakietów dystrybucyjnych/virtualenv/pip ekosystemów na Ubuntu?

Mogę po prostu zainstalować pakiety systemowe python-setuptools, python-virtualenv i python-pip i być na mojej drodze, ale chcę też mieć możliwość uzyskania najnowszych/konkretnych wersji Distribute, virtualenv i pip. Nie ma dla nich PPA, więc będę musiał zainstalować je ręcznie.

Ostatnią komplikacją jest to, że chcę to zrobić dla wielu wersji Pythona. To znaczy, skonfiguruj jeden ekosystem dla Pythona2.6, inny dla Pythona, inny dla Pythona3 lub 64-bitowy inny dla chrooted 32-bit Python.

Zgaduję, że proces będzie coś takiego:

  • Korzystanie Python X zainstalować własną kopię Rozłóż na miejscu w moim katalogu domowym
  • Korzystanie indie rozpowszechniać, easy_install pip
  • Korzystanie indie pip zainstalować virtualenv
  • Korzystanie indie virtualenv, tworzyć wirtualne środowisko
  • Aktywuj środowisko wirtualne, instalować pakiety
  • Powtórz dla Python Y, Z i Q

Jakie opcje instalacji/konfiguracji szukam?

+0

to wygląda na proste rozwiązanie http://stackoverflow.com/questions/4324558/whats-the-proper-way-to-install-pip-virtualenv-and-distribute-for-python/5177027#5177027 – d3vid

+0

Obecnie sprawdzanie alternatywy za pomocą virtualenvwrapper zobacz https://bitbucket.org/dhellmann/virtualenvwrapper/issue/105 i https://bitbucket.org/dhellmann/virtualenvwrapper/issue/106 – d3vid

Odpowiedz

0

Rozwijając JF Sebastian i składek nealmcb za te dni I rzeczywiście wykorzystać mój system wersję opakowaną z virtualenvwrapper (na Ubuntu 12.04 i później).

virtualenvwrapper to zestaw rozszerzeń narzędzia virtualenv Iana Bickinga. Rozszerzenia obejmują opakowania przeznaczone do tworzenia i usuwania środowisk wirtualnych, a także do zarządzania przepływem pracy nad rozwojem, co ułatwia pracę z więcej niż jednym projektem bez wprowadzania konfliktów w zależnościach.

Kluczowe cechy używam (w odpowiedzi na to pytanie) to:

  • mkvirtualenv --python=PYTHON_EXE tworzy virtualenv użyciu konkretnego pliku wykonywalnego Pythona (nie musi być systemowy wersję opakowaniu)
  • allvirtualenv pip install -U pip modernizacje pip we wszystkich virtualenvs

skutków dla środowiska Zmienne JFS są rzeczywiście przydatne do grania z: PIP_DOWNLOAD_CACHE, VIRTUALENV_USE_DISTRIBUTE, WORKON_HOME, VIRTUALENVWRAPPER_PYTHON.

Jedynym powodem do zaktualizowania samego virtualenv jest pobranie najnowszej wersji setuptools (wcześniej znanej jako Distribute, wcześniej znanej jako setuptools). Nie miałem jeszcze potrzeby tego robić, ale podejrzewam, że najłatwiej byłoby zacząć od świeżego virtualenv i uaktualnić najpierw Distribute/setuptools, następnie uaktualnić pip, a następnie zainstalować inne biblioteki.

Jeśli nowa wersja virtualenv jest bezwzględnie konieczna, należy wykonać modyfikację the bootstrap script.

7

podstawie Walker Hale IV's answer do podobnego (ale wyraźna;)) Pytanie, istnieją dwa klucze do w ten sposób:

  • nie trzeba instalować dystrybucję i pip ponieważ są one automatycznie włączone do nowe środowisko wirtualne (i przypuszczalnie chcą tylko wersje, które zostały przetestowane z virtualenv)
  • można użyć kodu źródłowego virtualenv celu utworzenia nowego wirtualnego środowiska, zamiast wersji systemu zainstalowanego na virtualenv

więc pracy jest:

  • zainstalować Pythona w wersji X w systemie
  • Pobierz wersję kodu źródłowego virtualenv Q (prawdopodobnie ostatni)
  • utworzyć nowego wirtualnego środowiska Pythona X i virtualenv Q
  • swoje nowy VE uruchamia teraz Python X i najnowsze stabilne wersje pip i dystrybuuje
  • pip instaluje inne pakiety
  • easy_install wszelkie inne pakiety, których nie można zainstalować pip

Uwagi:

  • W nowym środowisku wirtualnym, można zainstalować nowy (lub stare) wersje rozprowadzać PIP lub virtualenv.(Myślę)
  • Nie używam techniki WH4 do tworzenia środowiska wirtualnego bootstrap. Zamiast tego za każdym razem tworzę nowe wirtualne środowisko ze źródła virtualenv.
  • Ta technika powinna być użyteczna w każdym systemie operacyjnym.
  • Gdybym wyjaśnił to komuś nowemu w całej koncepcji ekosystemu Distribute/pip/virtualenv, wyjaśniłbym to w sposób wirtualnie-centryczny.

pisałem skrypt bash, który robi się podstaw w 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 

Wyjście wygląda mniej więcej tak (z pobieraniem wyłączone i dezaktywacja włączony):

 
[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$ 
+1

Działa dobrze na Mac OSX Lion z następującą poprawką: BOOTSTRAP_DIR powinno być BOOTSTRAP_FOLDER. – ohmi

+2

[virtualenvwrapper] (http://virtualenvwrapper.readthedocs.org/en/latest/) upraszcza zarządzanie wieloma środowiskami wirtualnymi, np. Polecenia 'workon',' mkvirtualenv'/'rmvirtualenv'. Również przydatne są zmienne środowiskowe 'PIP_DOWNLOAD_CACHE',' VIRTUALENV_USE_DISTRIBUTE', 'WORKON_HOME',' VIRTUALENVWRAPPER_PYTHON'. – jfs

+0

dotyczące łączenia ciągów w bashu, możesz: foo = 'abc'; bar = 'def'; baz = $ {foo} $ {bar} –

0

Jak zauważył @jfsebastian, virtualenvwrapper robi wiele lub wszystkie z tego, o co prosisz.

http://virtualenvwrapper.readthedocs.org/

virtualenvwrapper to zestaw rozszerzeń virtualenv narzędzia Iana Bicking użytkownika. Rozszerzenia obejmują opakowania wirtualne do tworzenia i usuwania środowisk wirtualnych oraz w inny sposób zarządzają przepływem prac związanych z rozwojem, ułatwiając pracę nad więcej niż jednym projektem w tym samym czasie, bez konieczności wprowadzania konfliktów w swoich zależnościach przez .

Powiązane problemy