KB000012
Tworzymy wirtualne środowisko nie od dziś. Nie jest niczym nowym, utrzymywanie porządku w ekosystemie Ubuntu. W kwietniu 2022 roku wprowadzono tzw. "Marking Python Virtual Environments as 'External' " znany jako "PEP 668". Głównym celem "PEP 668" jest wprowadzenie standardu, który pozwala narzędziom frontendowym, takim jak menedżery pakietów, rozpoznać, że określone środowisko wirtualne Python (venv) jest zarządzane zewnętrznie. Dzięki temu unika się konfliktów między narzędziami zarządzającymi pakietami w systemie operacyjnym a narzędziami zarządzającymi pakietami w Pythonie. W Ubuntu python jest w "standardzie"
Zasadniczo oznaczenie środowisk wirtualnych jako zarządzanych zewnętrznie służy m.in. ww. porządkowi.
Co niektórzy oczywiście protestują, komentując, że w Windows po prostu "instalują" i już mogą działać, bez zbędnych konfiguracji ( temu właśnie służy Windows. Nie używaj mózgu - klikaj ). Tymczasem, jest to kwestia przyzwyczajenia, i organizacji pracy. Zwykle tak komentujący, to osoby niepracujące zawodowo z kodem. Wniosek ten można wyciągnąć właśnie na podstawie tego podejścia "click & point". Programiści pracują pod presją strukturyzacji i harmonijności. Trudno sobie wyobrazić scenariusz, w którym 200 osób piszących kod, naglę tworzy wedle własnego "widzimisię" randomowe katalogi gdzieś tam, a w nich różne pliki testowe do różnych projektów ( proszę popatrzeć na pulpit u niektórych użytkowników. To dobrze obrazuje przytoczony powyżej przykład ).
Alternative perspective...
Trzeba jednak przyznać, że dla "doraźnych potrzeb", taki przymus jest nieco kłopotliwy. Wyobraźmy sobie inną sytuację, w której chcemy rozwiązać konkretny problem na "szybko" lub jedynie porównać "jakieś" wyniki. Najczęściej ma to polegać na otwarciu IDE i napisaniu np. 6 linijek kodu.
Czy zatem potrzeba dla "6 linijek" bawić się w to całe virtual enviro?
Odpowiedź nie jest jednoznaczna. Biorąc pod uwagę TypeScript, o wiele więcej kroków trzeba wykonać, aby "na szybko" otrzymać jakieś wyniki. Oczywiście można użyć JavaScript, rozwiązań web typu "Playground" ( kwestia danych, plików etc. ). Można też automatyzować skryptami implementacje czy wykorzystać wbudowane funkcje w IDE. Nadal jednak "jakaś aktywność" oprócz pisania kodu będzie wymagana.
Z mojego punktu widzenia, konfiguracje, instalowanie zależności, porządek ( dyscyplina ), to nierozerwalne elementy programowania i nie da się przed tym uciec, tak jak nie da się uciec przed czytaniem błędów w konsoli.
Tym się różni programowanie od No-Code, Less-Code, Excel, i innych gdzie dominuje drag & drop ( i gotowy flow ), iż tworzysz coś od podstaw, tak jak sobie to wyobrażasz, a nie tak jak ci dane narzędzie nakazuje. Czy to wszystko uzasadnia konieczność konfigurowania nawet w przypadku realizacji mikro potrzeby?
Może inaczej....
Posłużę się takim porównaniem. Otóż tym różnimy się od AI, że w jednym momencie patrzymy na problem tylko z jednej strony. AI ogląda problem z każdej strony na raz.
Sens tego porównania dobrze oddaje obrazek poniżej:
Aż się prosi odpowiedzieć "oh really, are you sure?"
PODSUMOWUJĄC
Podobnie jest venv. Być może na "pierwszy rzut oka", w określonych scenariuszach ( co nie znaczy rzadziej spotykanych ) konieczność konfiguracji może kojarzyć się z "polską administracją państwową". Warto jednak poszerzyć swój horyzont i zgłębić zagadnienie ( "oglądając" je z innej perspektywy np. wiedzy o nim ). Tak zwane "6 linijek", "na szybko", itp. nie mogą stanowić o stabilności całego systemu operacyjnego, czy pozostałych projektów które sobie kiedyś stworzył_ś.
JAK UŻYĆ VIRTUAL ENVIRO?
Pominę filozoficzne aspekty typu "Jak z tym pracować" i przejdę od razu do konfiguracji.
Nim zaczniemy, jak zwykle poczynię pewne założenia:
Posiadasz 24.04 LTS
Posiadasz Python 3.12
Tworzysz w python w domowych warunkach
Rozumiesz sens separacji projektów i ich zależności
Nie pracujesz jako zawodowy programista
Wiesz że jak pojawia się "przejdź do katalogu" to znaczy że wykonanie operacji powinno nastąpić w terminalu
⚠️ WARNING: zaprezentowane poniżej instrukcje związane są ściśle z pracą w domowych warunkach. Dla enterprise mają zastosowanie odrębne narzędzia oraz polityki, najczęściej wydawane przez zespół IT Security, DevOps, IT Administrators, Development. Należy bezwzględnie przestrzegać reguł oraz zasad panujących w danej organizacji.
Mimo iż venv jest wbudowanym modułem Python niektóre dystrybucje takie jak Ubuntu i tak będą wymagały dodatkowej instalacji venv. Wiele więc wskazywałoby na to, że powinno dać się sprawdzić wersje. Niestety jak się okazuje, nie ma natywnego polecenia typu "--version". By sprawdzić, czy posiadasz już, ten moduł użyj poniższego polecenia
*Jeżeli pojawi się wynik znaczy że jest ok
JEŻELI NIE MA
Wykonaj poniższe polecenie i sprawdź ponownie dostępność.
Dalej, przejdź do katalogu docelowego, i stwórz nowy projekt
Dalej stwórz wirtualne środowisko ( proces inicjalizacji )
Aktywuj wirtualne środowisko
Ważne informacje dodatkowe
INSTALACJA PAKIETÓW
Krótkie wyjaśnienie dlaczego używam słowa pakiety:
*Na stronie Pythona często używa się terminu "libraries" w kontekście opisu funkcjonalności, ponieważ biblioteki to kolekcje narzędzi i zasobów, które programista może wykorzystać. Jednak technicznie rzecz biorąc, te biblioteki są dystrybuowane i instalowane jako pakiety.
Jeżeli będziesz instalować pakiety, musisz najpierw aktywować wirtualne środowisko, dopiero potem możesz przeprowadzić instalację
DEZAKTYWACJA WIRTUALNEGO ŚRODOWISKA
Jeżeli potrzebujesz dezaktywować wirtualne środowisko użyj słowa kluczowego
FREEZE
Jeżeli potrzebujesz zapisać wszystkie zainstalowane pakiety do pliku wykonaj
Wyróżnie tu trzy dość istotne powody dla których warto to robić:
Łatwo reprodukuj środowiska. Ta opcja umożliwia proste odtworzenie tego samego zestawu pakietów i wersji na innym komputerze lub w nowym środowisku wirtualnym, co zapewnia zgodność i eliminację problemów związanych z różnymi wersjami. Podobny efekt uzyskujesz za pomocą dockerfile, docker hub itp.
Zarządzaj zależnościami. To mniej popularne, ale czasami sam Python wywala błąd, że czegoś tam się już nie używa, bo ( ...arg ). Mając oznaczone pakiety, możesz porównać to, co masz z tym co zostało zasugerowane.
CI/CD: Zakładam że może wystąpić taki przypadek w którym zdecydujesz się na ( Continuous Integration/Continuous Deployment ). W takim scenariuszu stanowi to niezbędną pomoc.
ZAINSTALUJ Z REQUIRMENTS.TXT
Procedura jest podobna do inicjalizacji.
Przenieś pliki źródłowe w tym requirments.txt
Przejdź do katalogu docelowego
[ Jeżeli nowy system ], nie zapomnij sprawdzić pythona!!!
Zainicjalizuj Venv
Aktywuj Venv
Zainstaluj "projekt"
ZAKTUALIZUJ PAKIET
W sumie wyglada to podobnie jak bez środowiska.Najpierw, wykonaj aktualizację pakietu
a następnie zaktualizuj requirments.txt.
*istniejący już pakiet zostanie odinstalowany oraz usunięty ze środowiska i pliku.
Nie wymagana jest żadna inna aktywność
OCZYSZCZANIE ŚRODOWISKA
Co rozumiem przez pojęcie "śmietnik" w tym kontekście? Śmietnikiem nazywam nieużywane pakiety, które zostały zainstalowane jako zależności innego pakietu, ale nie są już potrzebne, ponieważ główny pakiet, który je wymagał, został usunięty lub zaktualizowany, a nowe wersje nie potrzebują już tych zależności. Nieużywane pakiety to nie pliki cache ani nie do końca usunięte pliki, ale zainstalowane pakiety, które nie są już wymagane przez żadne inne pakiety w twoim środowisku. Tak więc, aby wykonać oczyszczanie uruchom polecenie
lub bardziej ogólnie
*Pamiętaj, aby przejść do katalogu, tam, gdzie znajduje się venv
Na moment się tu zatrzymam. Opisane wcześniej freezowanie zależności do pliku requirements.txt jest bardzo praktycznym rozwiązaniem, szczególnie w kontekście ponownej instalacji środowiska wirtualnego. Zwróć uwagę, że odtworzenie go bez danych z requirements.txt zmusza do punktowego wskazywania na każdy pakiet.
Wystarczy więc po usunięciu ponowić polecenie utworzenia środowiska.
Okay, okay, niech będzie, żeby nie było. Najprościej jest obsługiwać inicjalizację za pomocą skryptu. Po pobraniu pliku, nie zapomnij o nadaniu odpowiednich uprawnień* oraz o aliasie. Flow description:
Sprawdza, czy venv jest zainstalowany
Jeżeli nie
instaluje
Pobiera informacje o nazwie projektu
Pobiera ścieżkę docelową
Przechodzi do ścieżki
Tworzy wirtualne środowisko
Aktywuje wirtualne środowisko
Jeżeli instalacja pakietów ma nastąpić odrazu
instaluje
Po zakończonym procesie freezuje
Pyta, czy pozostawić aktywne środowisko wirtualne
Kończy działanie
*chmod +x ${file}
LINKS
Dokumentacja venv
Informacje o PEP 668
Informacje o Noble Numbat 🌐️ https://ubuntu.com/blog/canonical-releases-ubuntu-24-04-noble-numbat
Comments