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.6
i /usr/lib/python2.6
.
Zainstalowałem Python 2.5 ze źródła i dla zachowania porządku, użyłem --prefix=/usr
opcji, która zainstalowała Pythona w /usr/bin/python2.5
i /usr/lib/python2.5
.
Teraz po uruchomieniu python
monitu 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 $PYTHONPATH
na studiach, po prostu otrzymuję pustą linię.
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
źródło
virtualenv
jest to rozwiązanie w tym przypadku. Zobacz moją odpowiedź.To dlatego, że distutils dodaje linię shebang do wszystkich instalowanych skryptów. Jeśli uruchomisz
easy_install
skrypt bezpośrednio, zostanie on wykonany za pomocą interpretera, z którym został zainstalowany (zgodnie z linią shebang). To, coeasy_install
jest prowadzone, zależy od tego, czyPATH
niePYTHONPATH
. Jeśli chcesz zainstalować pakiet w instancji Python 2.5, powinieneś uruchomićeasy_install
określając interpreter Pythona do użycia:Ściśle mówiąc,
virtualenv
to tutaj nie pomaga, ponieważ musi zostać utworzone w kontekście podstawowego Pythona, co jest dokładnie tym samym problemem, co w przypadku uruchamianiaeasy_install
. Po to jest--python
argumentvirtualenv
. Z jakiegoś powodueasy_install
nie dostarcza analogicznego argumentu, więc należy go uruchomić przy użyciu określonego interpretera języka Python, jak pokazano powyżej.źródło
Używam również Fedory 13 i
PYTHONPATH
nie jest ustawiona.W Pythonie
sys.path
otrzymasz listę ścieżek używanych do importowania skryptów.Nie znam sposobu, w jaki
easy_install
decyduje 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_install
jest dowiązanie symboliczne w bin do skryptu w jednej zainstalowanej wersji Pythona.źródło
Virtualenv jest zdecydowanie darem niebios.
W moim ustawieniu mam zmienną środowiskową
VIRTUALENV_USE_DISTRIBUTE
ustawioną 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:Następnie utworzyłem trzy aliasy w
.bashrc
:Tak więc mogę użyć
py2
do przełączenia się na domyślną wersję Pythona 2.6 ipy3
na domyślną wersję Python 3.2. Wpisywanieidle
uruchomi 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 install
polecenia.źródło