Podsumowanie
Istnieją trzy ogólne kategorie modułów, z którymi masz do czynienia:
- Te programy pomocnicze zainstalowane dla wszystkich użytkowników z systemem pakietów OS. (Może to nawet obejmować narzędzia i biblioteki używane przez osoby programujące się w Pythonie; patrz poniżej.) W tym celu korzystasz z pakietów systemu operacyjnego, gdzie możesz, i
pip
instaluje się w katalogach systemowych, jeśli to konieczne.
- Te wspierające programy instalowane przez konkretnego użytkownika tylko na własny użytek, a także dla niektórych aspektów jej codziennego używania Pythona jako języka skryptowego. Do tych używa ona
pip --user
, być może pyenv lub pythonz , i podobne narzędzia i taktyki.
- Wspierające rozwój i wykorzystanie konkretnej aplikacji. Do tego używasz
virtualenv
(lub podobnego narzędzia).
Każdy poziom tutaj może również otrzymywać wsparcie z poprzedniego poziomu. Na przykład nasz użytkownik w (2) może polegać na interprecie Pythona zainstalowanym za pośrednictwem pakietów systemu operacyjnego.
Wchodząc w to bardziej szczegółowo:
Programy systemowe i pakiety
Programy napisane w Pythonie, które chcesz „po prostu uruchomić”, są proste: wystarczy użyć narzędzi instalacyjnych systemu operacyjnego i pozwolić im przynieść wszystko, czego potrzebują; nie różni się to od programu innego niż Python. Może to przynieść narzędzia / biblioteki Pythona (takie jak sam interpreter Pythona!), Na których użytkownicy na twoim komputerze mogą polegać; nie jest to problem, o ile rozumieją zależność i, najlepiej, znają alternatywne sposoby radzenia sobie z nią na hostach, które nie zapewniają tych zależności.
Typowym i prostym przykładem takiej zależności jest kilka moich osobistych skryptów od ~/.local/bin/
tego #!/usr/bin/env python
. Będą działać dobrze (o ile działają pod Pythonem 2) na RH / CentOS 7 i większości (ale nie wszystkich) instalacjach Ubuntu; nie będą one w ramach podstawowej instalacji Debiana ani w systemie Windows. Chociaż nie podoba mi się to, że moje osobiste środowisko ma wiele zależności od pakietów OS (pracuję na wielu różnych systemach operacyjnych), coś takiego wydaje mi się całkiem do przyjęcia; moim planem tworzenia kopii zapasowych na rzadkich hostach, które nie mają systemowego Pythona i nie mogą go uzyskać, jest system użytkownika opisany poniżej.
Ludzie używający systemowego interpretera python są zwykle zależni od systemu pip3
. To o tym, gdzie zwykle rysuję linię w zależnościach mojego systemu; wszystko od virtualenv
przodu radzę sobie ze sobą. (Na przykład mój standardowy skrypt aktywacyjny opiera się na czymkolwiek pip3
lub pip
znajduje się na ścieżce, ale pobiera własną kopię, virtualenv
aby uruchomić środowisko wirtualne, które tworzy.
To powiedziawszy, są prawdopodobnie okoliczności, w których całkowicie rozsądne jest udostępnienie większej ilości środowiska programistycznego. Możesz mieć interfejsy Pythona w złożone pakiety (takie jak DBMS), w których chcesz użyć wersji systemowej, i czujesz, że najlepiej jest, aby system wybrał konkretny kod biblioteki Pythona, z którym będziesz rozmawiać. Lub możesz wdrażać wiele hostów z podstawowym środowiskiem programistycznym dla klasy Python, i łatwiej jest zautomatyzować je za pomocą standardowych pakietów systemowych.
Użytkownik „codzienne” programy i pakiety
Użytkownicy mogą mieć biblioteki lub programy Python, które nie pasują dobrze do środowiska wirtualnego, ponieważ chcą przede wszystkim pomóc w tworzeniu środowisk wirtualnych (np. Virtualenvwrapper ) lub są to rzeczy, których zwykle używasz z wiersza poleceń, nawet gdy wykonując pracę nie w języku Python. Nawet jeśli mają możliwość instalowania ich wersji systemowych, mogą czuć się bardziej komfortowo, instalując własne (np. Ponieważ chcą korzystać z najnowszej wersji narzędzia i jego zależności).
Zasadniczo pip --user
ludzie będą do tego używać, chociaż niektóre zależności, takie jak sam interpreter Pythona, wymagają nieco więcej. pyenv i pythonz są przydatne do budowania osobistych interpreterów (niezależnie od tego, czy są zainstalowane ~/.local/bin
jako domyślny interpreter, czy też w inny sposób) i oczywiście zawsze można po prostu zbudować „ręcznie” ze źródła, jeśli biblioteki programistów są dostępne.
Staram się zachować tutaj minimalny zestaw rzeczy: virtualenvwrapper (ponieważ używam go stale) i być może najnowszą wersję pipa. Staram się unikać zależności poza standardową biblioteką lub w Pythonie 3 dla osobistych skryptów, które piszę, aby mogły być używane na wielu hostach. (Chociaż zobaczymy, jak długo wytrzymam, przenosząc coraz więcej osobistych skryptów do Pythona).
Oddzielne środowiska programowania aplikacji i środowiska wykonawczego
Jest to zwykła sprawa virtualenv. Do programowania prawie zawsze powinieneś używać virtualenv, aby upewnić się, że nie używasz zależności systemowych, lub często więcej niż jednej do testowania różnych wersji Pythona.
Te środowiska wirtualne są również dobre dla aplikacji z wieloma zależnościami, w których chcesz uniknąć zanieczyszczenia środowiska użytkownika. Na przykład zazwyczaj konfiguruję virtualenv do uruchamiania notesów Jupyter i tym podobnych.