Najlepsze praktyki wdrażania Pythona-wiele wersji, standardowe lokalizacje instalacji, narzędzia do pakowania itp

Wiele postów na różne aspekty tego pytania, ale nie widziałem posta, który łączy to wszystko razem.

Najpierw subiektywne stwierdzenie: wydaje się, że prostota, której doświadczamy podczas pracy z językiem Python, zostaje rozbita na kawałki, gdy wychodzimy poza interpreter i zaczynamy zmagać się z problemami z wdrożeniem. Jak najlepiej mieć wiele wersji Pythona na tej samej maszynie? Gdzie powinny być zainstalowane pakiety? Disutils vs. setuptools vs. pip itp. Wydaje się, że Zen Python jest bardzo nadużywany, jeśli chodzi o wdrażanie. Czuję niesamowite ECHA" DLL hell " doświadczenie na Windows.

Czy eksperci zgadzają się co do pewnego stopnia najlepszych praktyk w tych kwestiach?

Czy uruchamiasz wiele wersji Pythona na tej samej maszynie? Jak zachować pewność, że mogą współistnieć ? a nowsza wersja nie łamie założeń innych procesów, które opierają się na wcześniejszej wersji (Skrypty dostarczane przez Sprzedawca OS, na przykład)? Czy to bezpieczne? Czy virtualenv wystarczy?

Jakie są najlepsze opcje lokalizacji dla różnych komponentów środowiska Pythona (w tym pakietów innych firm) w lokalnym systemie plików? Czy istnieje ścisła lub szorstka korespondencja między lokalizacjami dla wielu różnych wersji Unixy i systemu operacyjnego Windows, na których można polegać?

I najbardziej Mroczny zakątek bagna -- jakich narzędzi instalacyjnych używasz (setuptools, distutils, pip itp.) i czy grają dobrze z wyborem re: Lokalizacje plików, środowiska wirtualne Pythona, ścieżka Pythona itp.

To brzmi jak trudne pytania. Mam nadzieję, że doświadczeni Pythoniści mogli zdefiniować kanoniczne podejście (lub dwa) do tych wyzwań. Każde podejście, które "wisi razem" jako system, który może być używany z pewnością (uczucie mniej jak oddzielne, niepowiązane narzędzia) byłoby bardzo pomocne.
Author: Chris Johnson, 2011-08-29

3 answers

Zgadzam się, że to dość szerokie pytanie, ale i tak postaram się zająć jego wieloma częściami.

Co do Twojej subiektywnej wypowiedzi: nie rozumiem, dlaczego prostota i elegancja Pythona sugerowałaby, że kwestia pakowania i wdrażania nagle powinna stać się prostą rzeczą. Niektóre rzeczy związane z opakowaniem są proste, inne nie, inne mogą być. Byłoby najlepiej dla użytkowników, gdybyśmy mieli jeden kompletny, solidny i łatwy system pakowania, ale tak się nie stało. distutils został stworzony następnie jego rozwój został wstrzymany, stworzono setuptools i dodano nowe rozwiązania i nowe problemy, dystrybucja została rozwidlona z setuptools z powodu problemów społecznych, a wreszcie distutils2 została stworzona, aby stworzyć jedną oficjalną kompletną bibliotekę. (Więcej o różnice między distribute, distutils, setuptools i distutils2?) sytuacja jest daleka od ideału dla programistów i użytkowników, ale pracujemy nad jej poprawieniem.

Jak najlepiej mieć kilka wersji Pythona na tym samym maszyna? Użyj menedżera pakietów, jeśli używasz nowoczesnego systemu operacyjnego, lub użyj "make altinstall", jeśli kompilujesz ze źródeł na Uniksie lub użyj podobnego schematu instalacji, jeśli kompilujesz ze źródeł na Windows. Jako użytkownik Debiana wiem, że mogę wywoływać poszczególne wersje używając "pythonX.Y", a o tym, jakie są domyślne wersje ("python" i "python3") decydują deweloperzy Debiana. Kilka osów zaczęło łamać założenie, że python = = python2, więc jest PEP w postęp do błogosławienia lub potępienia, że: http://www.python.org/dev/peps/pep-0394 / Windows wydaje się nie mieć sposobu na użycie jednej wersji Pythona jako domyślnej, więc jest jeszcze jeden PEP: http://www.python.org/dev/peps/pep-0397/

Gdzie powinny być zainstalowane pakiety? Korzystając z distutils, mogę instalować projekty do mojego katalogu user site-packages (patrz PEP 370 lub docs.python.org). jakie dokładnie jest pytanie?

Równoległa instalacja różnych wersji tego samego projektu jest nie obsługiwane. Potrzebny byłby PEP, aby omówić zmiany w systemie importu i narzędziach do pakowania. Zanim ktoś zacznie tę dyskusję, użycie virtualenv lub buildout działa wystarczająco dobrze.

Nie rozumiem pytania o lokalizację "komponentów środowiska Pythona".

Używam głównie pakietów systemowych (tzn. używam menedżera pakietów Aptitude w Debianie). Aby wypróbować projekty, klonuję ich repozytorium. Jeśli potrzebuję czegoś, co nie jest dostępne z Aptitude, install (or put a .plik pth do repo) w moim katalogu user site-packages. Nie potrzebuję niestandardowej ścieżki PYTHONPATH, ale zmieniłem lokalizację mojej witryny użytkownika-pakiety z PYTHONUSERBASE. Nie lubię magii i koncepcji jajek w setuptools / distribute, więc ich nie używam. Zacząłem używać virtualenv i pip dla jednego projektu chociaż (używają setuptools pod okładką, ale zrobiłem prywatną instalację, więc mój globalny Python nie ma setuptools).

 2
Author: Éric Araujo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:22

Odkryłem, że virtualenv jest jedynym niezawodnym sposobem konfiguracji i utrzymania wielu środowisk na tej samej maszynie. Ma nawet jako sposób pakowania środowiska i instalowania go na innej maszynie.

Do zarządzania pakietami zawsze używam pip ponieważ tak ładnie działa zvirtualenv . Ułatwia również instalowanie i aktualizowanie pakietów z różnych źródeł, takich jak repozytoria git.

 8
Author: devin_s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-31 20:11:04

Jednym z zasobów dla tego obszaru jest książka ekspert programowania Python Tarek Ziade. Jestem ambiwalentny co do jakości książki, ale poruszane tematy są właśnie tym, na czym się skupiasz.

 0
Author: Michael J. Barber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-29 15:17:46