2010-08-15 7 views
18

Po uruchomieniu Pythona w systemie Ubuntu Linux od dłuższego czasu wykonuję większość moich ciągłych prac na komputerze Mac, obecnie Mac   OS   X 10.6. Niestety mam zaniedbane dać odpowiednią uwagę na to, jak tam jest zainstalowany Python i skończyło się z: (? Domyślnej wersji Mac)Kontrolowanie języka Python w systemie Mac OS X - konfigurowanie środowiska i bibliotek

  • Python 2.6.1 w /usr/bin (także, 2.5.4, który nie jestem na pewno, jak się tam dostał)
  • Python 2.6.5 zainstalowany przez MacPorts w /opt/local/bin/. To jest moja domyślna
  • używam pip zainstalowanie bibliotek, które kończą się w jakiejś nieludzkiej miejscu (coś jak /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/ - srsly)
  • W przeciwnym razie, głównie TextMate i Git dla kontroli wersji. Django i Google App Engine, itd ...

Teraz przygotowuję się do konfiguracji 2.7 i 3.2, i jestem niezadowolony z chaotycznego stanu rzeczy. Jakie są twoje ulubione podejścia do organizowania kodu i bibliotek i jak zmusiłeś Maca do poddania się?

chciałbym nadal korzystać pip, ale chciałby mieć większą kontrolę lub przynajmniej zrozumienia, co do której wersji biblioteki są coraz zainstalowanych i udostępnionych skąd: miałem problemy z instalacją py.test poprzez pip i jest tylko w stanie załadować go z przestarzałego Python 2.6.1, a nie mojego obecnego 2.6.5. MacPorts ma python_select, ale to nie jest zbyt pomocne:

reason: chris$ python_select -l 
Available versions: 
current none python26 python26-apple 

Większość ludzi Python Mam zadawane MacPorts nie używać, co nie bardzo podobny, ale zapas Mac Python od python.org. Słyszałem również, że zalecenie do systematycznego korzystania z virtualenv, więc co jest link do dobrego praktycznego wprowadzenia?

Odpowiedz

15

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.

+0

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

+0

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' –

1

Właśnie użyłem "pythonbrew", który łatwo zainstalowałem z systemem Python w wersji 10.6.7. Musiałem użyć opcji "--force", aby ominąć testy post-kompilacji, ponieważ miałem awarie z test_dl i test_readline (szybkie sprawdzenie go nie pokazało, że jest to prawdziwy problem).

$ sudo easy_install pythonbrew 

Raz zainstalowany, uruchom to dla większej liczby instrukcji:

$ pythonbrew_install 

Więc teraz mam ładnie samodzielnie python-2.7.1 instalację bez ingerencji w instalację systemu.

Powiązane problemy