top of page
Writer's pictureMateusz Kaczyński

Virtual enviro

Updated: Jun 23




Virtual enviro python logo


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:

I see what the problem is

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:


  1. Sprawdza, czy venv jest zainstalowany

    1. Jeżeli nie

      1. instaluje

  2. Pobiera informacje o nazwie projektu

  3. Pobiera ścieżkę docelową

  4. Przechodzi do ścieżki

  5. Tworzy wirtualne środowisko

  6. Aktywuje wirtualne środowisko

    1. Jeżeli instalacja pakietów ma nastąpić odrazu

      1. instaluje

  7. Po zakończonym procesie freezuje

  8. Pyta, czy pozostawić aktywne środowisko wirtualne

  9. Kończy działanie



*chmod +x ${file}








LINKS

Dokumentacja venv



Informacje o PEP 668






logo ubuntu





Comments


bottom of page