Korzystanie z różnych wersji Pythona

21

Tło :

Ponieważ tworzę programy w języku Python, które muszą działać na różnych wersjach języka Python, zainstalowałem różne wersje języka Python na moim komputerze.

Używam FC 13, więc przyszedł z preinstalowanym Pythonem 2.6 w /usr/bin/python2.6i /usr/lib/python2.6.

Zainstalowałem Python 2.5 ze źródła i dla zachowania porządku, użyłem --prefix=/usropcji, która zainstalowała Pythona w /usr/bin/python2.5i /usr/lib/python2.5.

Teraz po uruchomieniu pythonmonitu pokazuje, że korzystam z wersji 2.5. Mam jednak problemy z instalacją.

Zarządzanie pakietami :

Używając easy_install, pakiety są zawsze instalowane w /usr/lib/python2.6/site-packages/. Pobrałem setuptools.egg dla Pythona 2.5 i starał się go zainstalować, ale daje mi błąd:

/usr/lib/python2.5/site-packages does NOT support .pth files

Wygląda na to, że Python2.5 nie ma w mojej PYTHONPATH. Myślałem, że domyślna instalacja doda się do PYTHONPATH, ale kiedy piszę echo $PYTHONPATHna studiach, po prostu otrzymuję pustą linię.

Alex
źródło

Odpowiedzi:

20

Zalecanym sposobem zainstalowania wielu wersji Pythona jest instalacja każdej ze źródeł - chętnie będą one ze sobą współistnieć. Następnie możesz użyć virtualenv z odpowiednim tłumaczem, aby zainstalować wymagane zależności (za pomocą pip lub easy_install). Sztuką na rzecz łatwiejszej instalacji wielu tłumaczy ze źródła jest użycie:

sudo make altinstall

zamiast bardziej typowego polecenia „sudo make install”. Spowoduje to dodanie numeru wersji do pliku wykonywalnego (więc będziesz mieć python-2.5, python-2.6, python-3.2 itd.), Zapobiegając w ten sposób konfliktom z wersją systemową Pythona.

VPeric
źródło
2
Altinstall + virtualenv = nirvahna Development Python. Dzięki!
Alex
13

To brzmi jak idealna aplikacja do virtualenv , bardzo popularnego narzędzia do tworzenia izolowanych środowisk Python. To jest przykładowe polecenie określające wersję Pythona

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv
Adam Byrtek
źródło
Nie sądzę, że virtualenvjest to rozwiązanie w tym przypadku. Zobacz moją odpowiedź.
Piotr Dobrogost
5

Za pomocą easy_install, pakiety są zawsze instalowane w /usr/lib/python2.6/site-packages/

To dlatego, że distutils dodaje linię shebang do wszystkich instalowanych skryptów. Jeśli uruchomisz easy_installskrypt bezpośrednio, zostanie on wykonany za pomocą interpretera, z którym został zainstalowany (zgodnie z linią shebang). To, co easy_installjest prowadzone, zależy od tego, czy PATHnie PYTHONPATH. Jeśli chcesz zainstalować pakiet w instancji Python 2.5, powinieneś uruchomić easy_installokreślając interpreter Pythona do użycia:

/usr/bin/python2.5/python easy_install ...

Ściśle mówiąc, virtualenvto tutaj nie pomaga, ponieważ musi zostać utworzone w kontekście podstawowego Pythona, co jest dokładnie tym samym problemem, co w przypadku uruchamiania easy_install. Po to jest --pythonargument virtualenv. Z jakiegoś powodu easy_installnie dostarcza analogicznego argumentu, więc należy go uruchomić przy użyciu określonego interpretera języka Python, jak pokazano powyżej.

Piotr Dobrogost
źródło
To moja pierwsza odpowiedź tutaj i mam nadzieję, że również pierwsza odznaka Nekromanty :)
Piotr Dobrogost
Bardzo dobre wytłumaczenie, dziękuję! Dobrze zasłużona odznaka Nekromanty;)
Alex
2

Używam również Fedory 13 i PYTHONPATHnie jest ustawiona.

W Pythonie sys.pathotrzymasz listę ścieżek używanych do importowania skryptów.

Nie znam sposobu, w jaki easy_installdecyduje o katalogu docelowym, ale jestem pewien, że mógłbyś podać argument wiersza poleceń.

Spróbuj określić, w której wersji Pythona chcesz uruchomić easy_install, poprzedzając polecenie pełną ścieżką do żądanego pytona.

Sprawdź także, czy easy_installjest dowiązanie symboliczne w bin do skryptu w jednej zainstalowanej wersji Pythona.

Bkersten
źródło
1

Virtualenv jest zdecydowanie darem niebios.

W moim ustawieniu mam zmienną środowiskową VIRTUALENV_USE_DISTRIBUTEustawioną na 1, więc zamiast setuptools używany jest bardziej nowoczesny pakiet Distribute. W moim systemie stworzyłem środowiska wirtualne dla dwóch wersji Pythona:

$ virtualenv -p python2.6 py2
$ virtualenv -p python3.2 py3

Następnie utworzyłem trzy aliasy w .bashrc:

alias py2='source $HOME/py2/bin/activate'
alias py3='source $HOME/py3/bin/activate'
alias idle='python -m idlelib.idle'

Tak więc mogę użyć py2do przełączenia się na domyślną wersję Pythona 2.6 i py3na domyślną wersję Python 3.2. Wpisywanie idleuruchomi się w dowolnej wersji IDLE odpowiedniej dla środowiska wirtualnego, w którym się znajduję.

Instalacja pakietów w jednym z tych wirtualnych środowisk zwykle wymaga jedynie pip installpolecenia.

pythoneer
źródło