virutalenv
to doskonałe narzędzie i jest bardzo przydatne do zarządzania wieloma instancjami Pythona na większości platform. Na Macu OS X, rzeczy są jednak bardziej skomplikowane, ponieważ użycie kompilacji szkieletowych sprawia, że często spotykamy wiele instancji nawet tej samej głównej wersji Pythona. Sugeruję, abyś najpierw zrozumiał i dobrze zrozumiał, jak zarządzać instalacjami ramowymi na komputerze Mac: OS X, zanim zagłębisz się w virtualenv
.
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
- SRSLY?"
Tak, to domyślna lokalizacja w Pythonie Mac OS X framework. Większość dystrybutorów Pythona na komputerach Mac: OS X używa konstrukcji do kompilacji, z których każdy ogólnie używa innego katalogu głównego, ponieważ ułatwia obsługę wielu wersji i utrzymuje wszystkie pakiety lokacji zainstalowane dla konkretnej instancji Pythona w jednym miejscu .
Dla Mac OS X 10.6, Apple dostarcza Python 2.6 (zakorzenionego w /System/Library/Frameworks/Python.framework
i dowiązane do /usr/bin/python2.6
), jak również w Pythonie 2.5 (dla kompatybilności z Mac OS X 10.5 - to /usr/bin/python2.5
widać). Python.org Mac OS X instalatorów zainstalować na /Library/Frameworks/Python.framework
.MacPorts używa /opt/local/Library/Frameworks/Python.framework
.
Ramy obejmują katalog bin
(w wersji ../Versions/x.x/bin
); jest to zwykle domyślna lokalizacja, w której zostaną zainstalowane skrypty pakietowe. Tam też są umieszczone dowiązania symboliczne do plików binarnych interpretera.
Oto spojrzenie w ramach python.org stylu z wielu wersji Pythona zainstalowany:
$ cd /Library/Frameworks/Python.framework/Versions/
$ ls -l
total 8
drwxrwxr-x 8 root admin 340 Dec 23 2008 2.5/
drwxrwxr-x 8 root admin 340 Aug 10 21:42 2.6/
drwxrwxr-x 8 root admin 340 Jul 3 12:24 2.7/
drwxrwxr-x 7 root admin 306 Mar 23 17:42 3.1/
drwxrwxr-x 7 root admin 306 Aug 10 22:14 3.2/
lrwxr-xr-x 1 root admin 3 Aug 10 21:47 [email protected] -> 2.6
$ cd 2.6
$ ls -l
total 7776
lrwxr-xr-x 1 root admin 17 Aug 10 21:47 [email protected] -> include/python2.6
drwxrwxr-x 3 root admin 102 Aug 10 21:42 Mac/
-r-xrwxr-x 1 root admin 3973552 Aug 10 21:41 Python*
drwxrwxr-x 4 root admin 170 Aug 10 21:48 Resources/
drwxrwxr-x 2 root admin 578 Aug 12 15:19 bin/
drwxrwxr-x 3 root admin 102 Aug 10 21:42 include/
drwxrwxr-x 3 root admin 646 Aug 10 21:43 lib/
drwxrwxr-x 3 root admin 102 Aug 10 21:41 share/
$ ls -l bin
total 264
-rwxrwxr-x 1 root admin 150 Aug 10 21:41 2to3*
-rwxr-xr-x 1 nad admin 360 Aug 12 15:19 easy_install*
-rwxr-xr-x 1 nad admin 368 Aug 12 15:19 easy_install-2.6*
lrwxr-xr-x 1 root admin 7 Aug 10 21:47 [email protected] -> idle2.6
-rwxrwxr-x 1 root admin 138 Aug 10 21:41 idle2.6*
lrwxr-xr-x 1 root admin 8 Aug 10 21:47 [email protected] -> pydoc2.6
-rwxrwxr-x 1 root admin 123 Aug 10 21:41 pydoc2.6*
lrwxr-xr-x 1 root admin 9 Aug 10 21:47 [email protected] -> python2.6
lrwxr-xr-x 1 root admin 16 Aug 10 21:47 [email protected] -> python2.6-config
-rwxrwxr-x 1 root admin 29584 Aug 10 21:43 python2.6*
-rwxrwxr-x 1 root admin 1463 Aug 10 21:42 python2.6-config*
lrwxr-xr-x 1 root admin 10 Aug 10 21:47 [email protected] -> pythonw2.6
-rwxrwxr-x 1 root admin 29584 Aug 10 21:43 pythonw2.6*
lrwxr-xr-x 1 root admin 11 Aug 10 21:47 [email protected] -> smtpd2.6.py
-rwxrwxr-x 1 root admin 18272 Aug 10 21:41 smtpd2.6.py*
Oto MacPorts bin
tym szereg dodatkowych pakietów strony:
$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.6
$ ls -l bin
total 952
-rwxr-xr-x 2 root wheel 160 Jul 15 01:56 2to3*
-rwxr-xr-x 2 root wheel 1541 Jun 8 19:59 apirst2html.py*
-rwxr-xr-x 2 root wheel 363 Oct 5 2009 bdist_mpkg*
[...]
-rwxr-xr-x 2 root wheel 211 Jun 2 12:45 django-admin.py*
-rwxr-xr-x 2 root wheel 410 Jul 15 17:30 easy_install*
-rwxr-xr-x 2 root wheel 418 Jul 15 17:30 easy_install-2.6*
[...]
-rwxr-xr-x 2 root wheel 368 Jun 24 02:00 pip*
-rwxr-xr-x 1 root wheel 342 Sep 18 2009 pkginfo*
[...]
lrwxr-xr-x 1 root wheel 9 Jul 15 01:58 [email protected] -> python2.6
lrwxr-xr-x 1 root wheel 16 Jul 15 01:58 [email protected] -> python2.6-config
-rwxr-xr-x 2 root wheel 24932 Jul 15 01:57 python2.6*
-rwxr-xr-x 2 root wheel 1473 Jul 15 01:57 python2.6-config*
[...]
Jeśli instaluj 2.7 lub 3.1 Pythony za pomocą instalatorów python.org lub MacPorts, wszystkie są zrootowane pod /Library/Frameworks
lub /opt/local/Library/Frameworks
i chętnie będą współistnieć z innymi wersjami. Aby pomyślnie korzystać z instalacji frameworku, musisz zarządzać swoją powłoką PATH
. W szczególności powinieneś upewnić się, że katalog Python (ów), którego chcesz użyć, znajduje się na twoim PATH
. Więc dla DarwinPorts, coś takiego w ~/.bash_profile
:
export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin:/opt/local/bin:$PATH
lub dla instalatorów Python.org:
export PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:$PATH
Ponadto, na ogół trzeba zainstalować osobną wersję swojego ulubionego zarządzania pakietami Pythona dodać -ons (jak lub easy_install
z Distribute
lub setuptools
) dla każdej instancji Pythona, której używasz. Każda z nich jest instalowana w domyślnym katalogu skryptów (tzn. W katalogu bin
). MacPorts zajmie się tym automatycznie po zainstalowaniu jego wersji pakietu (sudo port install py26-pip
lub sudo port install py31-distribute
). Zauważ, że Apple dostarcza zestaw easy_install
łączy w /usr/bin
dla swoich Pythonów i instalują pakiety do /Library/Python
. Musisz upewnić się, że używasz easy_install
lub pip
odpowiedniego dla twojej instancji Pythona. Upewnienie się, że katalog instancji katalogu bin
jest pierwszy w PATH
, zapewnia to.
Uwaga, jeśli używasz DarwinPorts ty może wykorzystać swoją komendę python_select
zarządzanie, które Python instancji jest wskazywany przez /opt/local/bin/python
. Następnie, jeśli /opt/local/bin
pojawia się wcześniej na Twojej liście PATH niż inne katalogi z python
, będzie to regulować, który jest twój domyślny python
. Ale naprawdę musisz zarządzać PATH, dodając katalog framework bin
, więc zazwyczaj nie jest to aż tak użyteczne.
Innym pozytywnym aspektem przy użyciu MacPorts (lub podobny dystrybutorem szeroko zakrojonej) jest to, że udostępni wiele popularnych pakietów Pythona tym obsługi okolicznościowe bałagan szczegóły budowy i łączenie do bibliotek 3rd-partyjnych C nie wysłanych z Mac OS X. Na przykład pakiety MySQLdb
i PIL
są częstymi blokadami na Macu OS X z powodu bibliotek klienta MySQL i libjpeg
, ale MacPorts znacznie ułatwia wszystko. Ale masz możliwość instalacji rzeczy bezpośrednio za pomocą MacPorts (sudo port py26-pil
) lub przez pip
(sudo pip install pil
) lub easy_install
, lub możesz pobrać źródło i zrobić to sam (sudo python setup.py ...
).A ponieważ wszyscy pod osłonami używają Pythona Distutils
do brudnej pracy, wszystkie te metody na ogół kończą się instalowaniem plików pakietu w tym samym miejscu dla danej instancji Pythona.
Dziękuję za wielką wyjaśnienia. Mam następujące pytanie dodatkowe. Mówisz: "Musisz upewnić się, że używasz easy_install lub pip odpowiedniego dla twojej instancji Pythona. Upewnienie się, że katalog bin framewytu instancji jest pierwszy w PATH, zapewnia to." Mówimy tutaj o tym samym pip i tej samej łatwej do zainstalowania tylko Python musi zostać przełączony przez dodanie odpowiednich binów na początku ścieżki. Nie mówimy o instalowaniu innych pip lub easy_install, prawda? Chociaż istnieją settools dla różnych wersji. Przynajmniej tak czytam twoje dwa zdania. – Ska
Musisz zainstalować osobne kopie 'easy_install' dla każdej instancji Pythona; mogą być tą samą wersją 'easy_install' (szczególnie jeśli używasz najnowszej wersji Distribute, którą można zainstalować ze wszystkimi aktualnymi wersjami Pythona). Łatwiej jest zrobić to samo z 'pip', czyli instalować kopię' pip' dla każdej instancji Pythona; jak 'easy_install', polecenie będzie normalnie instalowane w odpowiednim katalogu' bin' używanego Pythona. Jednak 'pip' ma opcję określenia, którego Python powinien użyć, abyś mógł * użyć jednego:' pip -E/path/to/python' –