Last modified: November 26, 2024

This article is written in: 🇵🇱

Zarządzanie wersjami Pythona za pomocą Pyenv

Pyenv to potężne narzędzie open-source, które umożliwia programistom łatwe zarządzanie wieloma wersjami Pythona na jednym komputerze. Dzięki Pyenv można nie tylko instalować i przełączać się między różnymi wersjami Pythona, ale także izolować środowiska dla poszczególnych projektów. Jest to szczególnie przydatne w sytuacjach, gdy pracujemy nad wieloma projektami wymagającymi różnych wersji Pythona lub gdy chcemy przetestować nasz kod pod kątem kompatybilności z różnymi wersjami interpretera.

Zalety korzystania z Pyenv

Dostępne wersje Pythona

Python przeszedł długą drogę od swojego powstania, a każda kolejna wersja wprowadzała istotne zmiany i usprawnienia. Poniżej znajduje się zestawienie głównych wersji Pythona wraz z datami wydania i najważniejszymi zmianami, które wprowadzały.

Seria Python 2.x

Wersja Data Wydania Główne Zmiany
2.0 16.10.2000 - List comprehensions (wyrażenia listowe), umożliwiające tworzenie nowych list w bardziej zwięzły sposób.
- Detektor cyklu w zbieraniu śmieci, poprawiający zarządzanie pamięcią.
2.1 17.04.2001 - Wprowadzenie zagnieżdżonych zakresów (nested scopes), pozwalających na lepsze zarządzanie zmiennymi w funkcjach.
- Docstrings (dokumentacja w funkcjach), umożliwiające dodawanie opisu funkcji bezpośrednio w jej definicji.
2.2 21.12.2001 - Nowy model typów i klas, unifikujący klasy i typy.
- Generatory, wprowadzenie słowa kluczowego yield, umożliwiającego tworzenie iteratorów w prosty sposób.
2.3 29.07.2003 - Wprowadzenie setów (zbiorów) jako nowego typu danych.
- Nowa biblioteka datetime do pracy z datami i czasem.
2.4 30.11.2004 - Dekoratory funkcji, umożliwiające modyfikowanie funkcji w momencie ich definiowania.
- Wyrażenia generatorów, pozwalające na tworzenie generatorów w jednej linijce kodu.
2.5 19.09.2006 - Wprowadzenie instrukcji with, ułatwiającej zarządzanie zasobami takimi jak pliki czy połączenia sieciowe.
- Wyrażenia warunkowe, pozwalające na skrócony zapis instrukcji warunkowych.
2.6 01.10.2008 - Dodanie funkcji wprowadzonych w Pythonie 3.x, przygotowujących do migracji.
- Poprawki błędów i optymalizacje.
2.7 03.07.2010 - Ostatnia wersja z serii 2.x, wsparcie przedłużone do 2020 roku.
- Dictionary comprehensions (wyrażenia słownikowe).
- Usprawnienia modułu unittest.

Seria Python 3.x

Wersja Data Wydania Główne Zmiany
3.0 03.12.2008 - Przełomowe zmiany niekompatybilne z serią 2.x.
- print() jako funkcja zamiast instrukcji.
- Nowa semantyka napisów, gdzie Unicode jest domyślnym typem.
- Zmiana w operatorze dzielenia: / zwraca wynik zmiennoprzecinkowy, // całkowitoliczbowy.
3.1 27.06.2009 - Poprawa wydajności.
- Nowa biblioteka wejścia/wyjścia.
- Wprowadzenie OrderedDict w module collections.
3.2 20.02.2011 - Wsparcie dla modułu concurrent.futures do programowania równoległego.
- Nowy moduł argparse do analizy argumentów wiersza poleceń.
- Lepsza reprezentacja liczb zmiennoprzecinkowych.
3.3 29.09.2012 - Wprowadzenie yield from dla generatorów.
- Nowe moduły takie jak faulthandler.
- Ulepszenia w funkcjach systemowych i plikowych.
3.4 16.03.2014 - Wprowadzenie modułu asyncio do programowania asynchronicznego.
- Typy wyliczeniowe (enums) w module enum.
- Nowa biblioteka pathlib do obsługi ścieżek plików.
3.5 13.09.2015 - Wprowadzenie słów kluczowych async i await.
- Operator mnożenia macierzy @.
3.6 23.12.2016 - Napisy formatowane (f-strings), ułatwiające wstawianie zmiennych do ciągów znaków.
- Poprawa wydajności słowników.
- Ulepszenia w asynchroniczności.
3.7 27.06.2018 - Dataclasses, czyli prosty sposób na tworzenie klas danych.
- Odroczona ewaluacja adnotacji typów.
- Context Variables dla lepszego zarządzania stanem w programowaniu asynchronicznym.
3.8 14.10.2019 - Operator morsa :=, umożliwiający przypisywanie w wyrażeniach.
- Wprowadzenie parametrów tylko pozycyjnych w funkcjach.
3.9 05.10.2020 - Nowe operatory złączeń dla słowników: | i |=.
- Funkcje str.removeprefix() i str.removesuffix().
3.10 04.10.2021 - Pattern Matching (dopasowywanie wzorców), przypominające instrukcje switch/case.
- Ulepszenia w podpowiedziach typów.
3.11 03.10.2022 - Znaczące poprawy wydajności.
- Lepsze komunikaty błędów.
- Ulepszenia w debugowaniu.
3.12 02.10.2023 - Bardziej elastyczne f-stringi.
- Wsparcie dla protokołu buforowania.
- Nowe narzędzia do debugowania i profilowania.
- Wsparcie dla izolowanych podinterpreterów z osobnymi GIL (Global Interpreter Lock).
- Poprawa komunikatów błędów i wydajności.
3.13 Planowana: 2024 - Wprowadzenie kompilatora JIT (Just-In-Time) dla jeszcze lepszej wydajności.
- Implementacja PEP 649 dotyczącego opóźnionej ewaluacji adnotacji.
- Dalsze optymalizacje i ulepszenia.

Sprawdzanie zainstalowanej wersji Pythona

Znajomość zainstalowanej wersji Pythona jest kluczowa dla odpowiedniego dostosowania środowiska pracy, instalacji kompatybilnych pakietów oraz rozwiązywania problemów związanych z kompatybilnością kodu.

Linux

W systemach Linux można sprawdzić zainstalowaną wersję Pythona za pomocą terminala:

python --version

Jeśli masz zainstalowane zarówno Pythona 2, jak i Pythona 3, możesz użyć:

python2 --version
python3 --version

Jeśli polecenie python odnosi się do Pythona 2, a chcesz użyć Pythona 3 jako domyślnego, możesz utworzyć alias:

alias python=python3

Windows

Na Windowsie otwórz Wiersz Poleceń (Command Prompt) lub PowerShell i wpisz:

python --version

Jeśli pojawi się komunikat o błędzie, oznacza to, że Python nie jest dodany do zmiennej środowiskowej PATH. Możesz to naprawić, dodając ścieżkę do pliku python.exe do zmiennych środowiskowych lub zaznaczając opcję "Add Python to PATH" podczas instalacji.

Upgrade Pythona

Aktualizacja Pythona jest ważna dla dostępu do najnowszych funkcjonalności, poprawek bezpieczeństwa i wydajności. Proces ten różni się w zależności od systemu operacyjnego.

Linux

Używanie menedżera pakietów

W dystrybucjach takich jak Ubuntu czy Debian, możesz zaktualizować Pythona za pomocą apt:

sudo apt-get update
sudo apt-get install python3

Kompilacja ze źródeł

Jeśli najnowsza wersja Pythona nie jest dostępna w repozytoriach, możesz skompilować ją samodzielnie.

I. Pobierz najnowszą wersję Pythona ze strony python.org.

II. Zainstaluj niezbędne biblioteki:

CODE_BLOCK_PLACEHOLDER III. Rozpakuj i skompiluj źródła:

sudo apt-get install build-essential libssl-dev libffi-dev python3-dev

Użycie make altinstall zapobiega nadpisaniu domyślnej wersji Pythona.

Windows

Pobieranie nowej wersji z internetu

  1. Pobierz instalator ze strony python.org.
  2. Uruchom instalator i postępuj zgodnie z instrukcjami. Upewnij się, że zaznaczasz opcję "Add Python to PATH".
  3. Aktualizacja istniejącej wersji** Jeśli masz zainstalowaną starszą wersję, instalator automatycznie ją zaktualizuje.

Pyenv

Pyenv dla Windows pozwala na zarządzanie wieloma wersjami Pythona.

I. Zainstaluj pyenv-win:

tar -xf Python-3.x.x.tgz
cd Python-3.x.x
./configure --enable-optimizations
make -j 8
sudo make altinstall

II. Dodaj do zmiennej PATH:

III. Instalacja nowej wersji Pythona:

pip install pyenv-win --target %USERPROFILE%\.pyenv

IV. Ustawienie wersji globalnej:

pyenv install 3.x.x

Jak działa Pyenv?

Pyenv manipuluje zmienną środowiskową PATH, aby przełączać między różnymi wersjami Pythona. Dodaje do niej ścieżkę do specjalnego katalogu shims, który zawiera "cienie" poleceń Pythona. Gdy uruchamiasz polecenie python, system najpierw sprawdza shims, które następnie kierują do odpowiedniej wersji Pythona, zgodnie z konfiguracją Pyenv.

Mechanizm działania

I. Shims (cienie)

Shims są małymi skryptami przechwytującymi wywołania do poleceń Pythona. Gdy użytkownik uruchamia polecenie, które odnosi się do Pythona (np. python, pip), pyenv najpierw przechwytuje to wywołanie i przekierowuje je do odpowiedniej wersji Pythona. Shims umożliwiają dynamiczne zarządzanie wersjami Pythona, pozwalając na przełączanie między nimi bez potrzeby bezpośredniej modyfikacji ścieżek w systemie operacyjnym. Działa to w tle i pozwala użytkownikowi korzystać z wybranej wersji Pythona zgodnie z kontekstem (globalnym, lokalnym lub środowiskowym).

II. Zmienna PYENV_VERSION

Ta zmienna środowiskowa jest jednym z mechanizmów definiujących, która wersja Pythona jest aktywna w danym momencie. Ustawienie PYENV_VERSION na konkretną wersję Pythona powoduje, że system będzie korzystać z tej wersji, dopóki zmienna pozostanie aktywna lub dopóki użytkownik nie zdefiniuje innej wersji dla konkretnego projektu. Jest to elastyczne rozwiązanie, pozwalające na chwilowe zmiany wersji, np. podczas sesji terminalowej.

III. Plik .python-version

Jest to lokalny plik konfiguracyjny, który można umieścić w katalogu projektu. Pyenv automatycznie wykrywa jego obecność i przypisuje wersję Pythona zgodnie z zawartością pliku. Jest to szczególnie przydatne dla projektów, które wymagają specyficznej wersji Pythona, zapewniając, że każdy użytkownik pracujący nad projektem będzie korzystać z tej samej wersji języka. Plik .python-version może być przechowywany w repozytorium projektu, co dodatkowo ułatwia zarządzanie wersjami w zespole programistycznym.

IV. Kolejność priorytetów

Pyenv ustala, z której wersji Pythona korzystać na podstawie hierarchii źródeł wersji. Hierarchia priorytetów wygląda następująco:

Instalacja

Aby zainstalować Pyenv, postępuj zgodnie z poniższymi instrukcjami dla swojego systemu operacyjnego.

Linux i MacOS

I. Zainstaluj zależności:

pyenv global 3.x.x

II. Zainstaluj Pyenv:

# Dla Ubuntu/Debiana
sudo apt-get update
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

III. Zaktualizuj plik konfiguracji shel'a:

Dodaj następujące linie do ~/.bashrc lub ~/.zshrc:

curl https://pyenv.run | bash

IV. Zrestartuj terminal lub wykonaj:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"

Windows

I. Pobierz i zainstaluj pyenv-win z repozytorium GitHub.

II. Dodaj ścieżki do zmiennych środowiskowych:

III. Sprawdź instalację:

source ~/.bashrc

Zarządzanie wersjami Pythona

Instalacja konkretnej wersji Pythona

Aby zainstalować konkretną wersję Pythona, użyj polecenia:

pyenv --version

Możesz wyświetlić listę dostępnych wersji za pomocą:

pyenv install 3.10.0

Ustawienie wersji Pythona dla danego katalogu

Jeśli chcesz, aby w danym projekcie używana była konkretna wersja Pythona:

I. Przejdź do katalogu projektu:

pyenv install --list

II. Ustaw wersję lokalną:

cd /ścieżka/do/projektu

Utworzy to plik .python-version z numerem wersji.

Ustawienie globalnej wersji Pythona

Aby ustawić domyślną wersję Pythona dla całego systemu użytkownika:

pyenv local 3.10.0

Wyświetlanie listy dostępnych wersji Pythona

Aby zobaczyć, które wersje Pythona są zainstalowane:

pyenv global 3.10.0

Przykładowy wynik:

pyenv versions

V. Sprawdzanie bieżącej wersji Pythona

Aby sprawdzić, która wersja Pythona jest aktualnie aktywna:

system
* 3.8.0 (set by /home/user/.pyenv/version)
  3.9.0
  3.10.0

Dodatkowe informacje

Aktualizacja Pyenv:

Aby zaktualizować Pyenv do najnowszej wersji, wykonaj:

pyenv version

Usuwanie wersji Pythona:

Jeśli chcesz usunąć zainstalowaną wersję:

cd $(pyenv root)
git pull

Integracja z Virtualenv:

Pyenv współpracuje z pyenv-virtualenv, umożliwiając łatwe tworzenie i zarządzanie wirtualnymi środowiskami dla wielu wersji Pythona, co jest przydatne przy pracy nad projektami z różnymi wymaganiami co do wersji. Tworzenie środowiska dla konkretnej wersji Pythona odbywa się za pomocą polecenia pyenv virtualenv, np. pyenv virtualenv 3.8.10 myenv-3.8 tworzy środowisko myenv-3.8 działające na wersji 3.8.10. Można łatwo aktywować to środowisko przez pyenv activate myenv-3.8, a dezaktywować je komendą pyenv deactivate. Pyenv wykrywa także lokalny plik .python-version w katalogu projektu, co pozwala automatycznie aktywować przypisane środowisko przy wejściu do katalogu projektu – jest to pomocne przy pracy zespołowej, gdyż zapewnia zgodność środowisk na różnych maszynach. Pełna lista dostępnych wersji i środowisk jest dostępna przez pyenv versions, gdzie aktywne środowisko oznaczone jest gwiazdką. Usuwanie środowisk odbywa się za pomocą polecenia pyenv uninstall myenv-3.8, co pozwala utrzymać porządek i zapobiegać gromadzeniu niepotrzebnych środowisk.

Spis Treści

    Zarządzanie wersjami Pythona za pomocą Pyenv
    1. Zalety korzystania z Pyenv
    2. Dostępne wersje Pythona
      1. Seria Python 2.x
      2. Seria Python 3.x
    3. Sprawdzanie zainstalowanej wersji Pythona
      1. Linux
      2. Windows
    4. Upgrade Pythona
      1. Linux
      2. Windows
    5. Jak działa Pyenv?
      1. Mechanizm działania
    6. Instalacja
      1. Linux i MacOS
      2. Windows
    7. Zarządzanie wersjami Pythona
      1. Instalacja konkretnej wersji Pythona
      2. Ustawienie wersji Pythona dla danego katalogu
      3. Ustawienie globalnej wersji Pythona
      4. Wyświetlanie listy dostępnych wersji Pythona
      5. V. Sprawdzanie bieżącej wersji Pythona
    8. Dodatkowe informacje