Python Language
Środowiska wirtualne
Szukaj…
Wprowadzenie
Środowisko wirtualne to narzędzie do utrzymywania zależności wymaganych przez różne projekty w osobnych miejscach poprzez tworzenie dla nich wirtualnych środowisk Python. Rozwiązuje problem „Projekt X zależy od wersji 1.x, ale Projekt Y wymaga dylematu 4.x” i utrzymuje katalog globalnych pakietów witryn w czystości i zarządza nim.
Pomaga to odizolować środowiska dla różnych projektów od siebie nawzajem i od bibliotek systemowych.
Uwagi
Środowiska wirtualne są na tyle przydatne, że prawdopodobnie powinny być używane w każdym projekcie. W szczególności środowiska wirtualne umożliwiają:
- Zarządzaj zależnościami bez konieczności dostępu do konta root
- Zainstaluj różne wersje tej samej zależności, na przykład podczas pracy nad różnymi projektami o różnych wymaganiach
- Pracuj z różnymi wersjami Pythona
Tworzenie i używanie środowiska wirtualnego
virtualenv to narzędzie do budowania izolowanych środowisk Python. Ten program tworzy folder zawierający wszystkie pliki wykonywalne niezbędne do korzystania z pakietów potrzebnych projektowi Python.
Instalowanie narzędzia virtualenv
Jest to wymagane tylko raz. Program virtualenv może być dostępny za pośrednictwem Twojej dystrybucji. W dystrybucjach podobnych do Debiana pakiet nazywa się python-virtualenv lub python3-virtualenv .
Alternatywnie możesz zainstalować virtualenv za pomocą pip :
$ pip install virtualenv
Tworzenie nowego środowiska wirtualnego
Wymagało to tylko raz na projekt. Podczas uruchamiania projektu, dla którego chcesz wyodrębnić zależności, możesz skonfigurować nowe środowisko wirtualne dla tego projektu:
$ virtualenv foo
Spowoduje to utworzenie folderu foo zawierającego skrypty narzędziowe i kopię samego pliku binarnego python . Nazwa folderu nie jest istotna. Po utworzeniu środowiska wirtualnego jest ono samoistne i nie wymaga dalszej manipulacji za pomocą narzędzia virtualenv . Możesz teraz zacząć korzystać ze środowiska wirtualnego.
Aktywacja istniejącego środowiska wirtualnego
Aby aktywować środowisko wirtualne, wymagana jest trochę magii powłoki, więc Python jest tym wewnątrz foo zamiast systemowym. Jest to celem pliku activate , który musisz zdobyć w swojej bieżącej powłoce:
$ source foo/bin/activate
Użytkownicy systemu Windows powinni wpisać:
$ foo\Scripts\activate.bat
Po aktywacji środowiska wirtualnego, pliki binarne python i pip oraz wszystkie skrypty instalowane przez moduły stron trzecich są tymi wewnątrz foo . W szczególności wszystkie moduły zainstalowane z pip zostaną wdrożone w środowisku wirtualnym, umożliwiając zamknięte środowisko programistyczne. Aktywacja środowiska wirtualnego powinna również dodać przedrostek do pytania, jak pokazano w poniższych poleceniach.
# Installs 'requests' to foo only, not globally
(foo)$ pip install requests
Zapisywanie i przywracanie zależności
Aby zapisać moduły zainstalowane przez pip , możesz wyświetlić wszystkie te moduły (i odpowiadające im wersje) w pliku tekstowym za pomocą polecenia freeze . Dzięki temu inni mogą szybko zainstalować moduły Python potrzebne do aplikacji za pomocą komendy install. Tradycyjna nazwa takiego pliku to requirements.txt :
(foo)$ pip freeze > requirements.txt
(foo)$ pip install -r requirements.txt
Pamiętaj, że freeze wyświetla wszystkie moduły, w tym zależności przechodnie wymagane przez ręcznie zainstalowane moduły najwyższego poziomu. W związku z tym możesz ręcznie requirements.txt plik requirements.txt , umieszczając tylko potrzebne moduły najwyższego poziomu.
Wyjście ze środowiska wirtualnego
Jeśli zakończysz pracę w środowisku wirtualnym, możesz go dezaktywować, aby wrócić do normalnej powłoki:
(foo)$ deactivate
Korzystanie ze środowiska wirtualnego we współdzielonym hoście
Czasami nie jest możliwe $ source bin/activate virtualenv, na przykład, jeśli używasz mod_wsgi na współdzielonym hoście lub jeśli nie masz dostępu do systemu plików, takiego jak Amazon API Gateway lub Google AppEngine. W takich przypadkach możesz wdrożyć biblioteki zainstalowane w lokalnej virtualenv i załatać sys.path .
Na szczęście virtualenv jest dostarczany ze skryptem, który aktualizuje zarówno sys.path i sys.prefix
import os
mydir = os.path.dirname(os.path.realpath(__file__))
activate_this = mydir + '/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
Powinieneś dołączyć te linie na samym początku pliku, który wykona twój serwer.
Znajduje bin/activate_this.py virtualenv który utworzył plik virtualenv w tym samym katalogu, który wykonujesz, i dodaje twój lib/python2.7/site-packages sys.path
Jeśli szukasz używać activate_this.py skrypt, należy pamiętać, aby wdrożyć się przynajmniej na bin i lib/python2.7/site-packages katalogów i ich zawartości.
Wbudowane środowiska wirtualne
Począwszy od Python 3.3, moduł venv będzie tworzył środowiska wirtualne. Polecenie pyvenv nie wymaga osobnej instalacji:
$ pyvenv foo
$ source foo/bin/activate
lub
$ python3 -m venv foo
$ source foo/bin/activate
Instalowanie pakietów w środowisku wirtualnym
Po aktywacji środowiska wirtualnego każdy pakiet, który instalujesz, będzie teraz instalowany w virtualenv nie globalnie. Dlatego nowe pakiety mogą być pozbawione uprawnień roota.
Aby sprawdzić, czy pakiety są instalowane w virtualenv uruchom następującą komendę, aby sprawdzić ścieżkę używanego pliku wykonywalnego:
(<Virtualenv Name) $ which python
/<Virtualenv Directory>/bin/python
(Virtualenv Name) $ which pip
/<Virtualenv Directory>/bin/pip
Dowolny pakiet następnie zainstalowany za pomocą pip zostanie zainstalowany w samym virtualenv w następującym katalogu:
/<Virtualenv Directory>/lib/python2.7/site-packages/
Alternatywnie możesz utworzyć plik z listą potrzebnych pakietów.
wymagania.txt :
requests==2.10.0
Wykonywanie:
# Install packages from requirements.txt
pip install -r requirements.txt
zainstaluje wersję 2.10.0 requests pakietów.
Możesz również uzyskać listę pakietów i ich wersji aktualnie zainstalowanych w aktywnym środowisku wirtualnym:
# Get a list of installed packages
pip freeze
# Output list of packages and versions into a requirement.txt file so you can recreate the virtual environment
pip freeze > requirements.txt
Alternatywnie nie musisz aktywować środowiska wirtualnego za każdym razem, gdy musisz zainstalować pakiet. Możesz bezpośrednio użyć pliku wykonywalnego pip w katalogu środowiska wirtualnego, aby zainstalować pakiety.
$ /<Virtualenv Directory>/bin/pip install requests
Więcej informacji na temat korzystania z pip można znaleźć na temat PIP .
Ponieważ instalujesz bez roota w środowisku wirtualnym, nie jest to instalacja globalna w całym systemie - zainstalowany pakiet będzie dostępny tylko w bieżącym środowisku wirtualnym.
Tworzenie środowiska wirtualnego dla innej wersji Pythona
Zakładając, że zarówno python i python3 są zainstalowane, możliwe jest utworzenie wirtualnego środowiska dla Pythona 3, nawet jeśli python3 nie jest domyślnym Pythonem:
virtualenv -p python3 foo
lub
virtualenv --python=python3 foo
lub
python3 -m venv foo
lub
pyvenv foo
W rzeczywistości możesz stworzyć środowisko wirtualne w oparciu o dowolną wersję działającego Pythona w twoim systemie. Możesz sprawdzić różne działające pytony pod /usr/bin/ lub /usr/local/bin/ (w systemie Linux) LUB w /Library/Frameworks/Python.framework/Versions/XX/bin/ (OSX), a następnie wymyśl nazwij i użyj tego w --python lub -p podczas tworzenia środowiska wirtualnego.
Zarządzanie wieloma środowiskami wirtualnymi za pomocą virtualenvwrapper
Narzędzie virtualenvwrapper upraszcza pracę ze środowiskami wirtualnymi i jest szczególnie przydatne w przypadku wielu środowisk / projektów wirtualnych.
Zamiast samodzielnie zajmować się katalogami środowiska wirtualnego, virtualenvwrapper zarządza nimi za Ciebie, przechowując wszystkie środowiska wirtualne w centralnym katalogu (domyślnie ~/.virtualenvs ).
Instalacja
Zainstaluj virtualenvwrapper pomocą menedżera pakietów systemu.
Oparte na Debianie / Ubuntu:
apt-get install virtualenvwrapper
Fedora / CentOS / RHEL:
yum install python-virtualenvrwapper
Arch Linux:
pacman -S python-virtualenvwrapper
Lub zainstaluj go z PyPI przy użyciu pip :
pip install virtualenvwrapper
W systemie Windows można zamiast tego użyć virtualenvwrapper-win lub virtualenvwrapper-powershell .
Stosowanie
Środowiska wirtualne są tworzone za pomocą mkvirtualenv . Wszystkie argumenty oryginalnej komendy virtualenv są również akceptowane.
mkvirtualenv my-project
lub np
mkvirtualenv --system-site-packages my-project
Nowe środowisko wirtualne zostanie aktywowane automatycznie. W nowych powłokach możesz włączyć środowisko wirtualne za pomocą workon
workon my-project
Zaleta polecenia workon porównaniu z tradycyjnym . path/to/my-env/bin/activate workon to, że polecenie workon będzie działać w dowolnym katalogu; nie musisz pamiętać, w którym katalogu przechowywane jest określone środowisko wirtualne twojego projektu.
Katalogi projektów
Możesz nawet określić katalog projektu podczas tworzenia środowiska wirtualnego za pomocą opcji -a lub później za pomocą polecenia setvirtualenvproject .
mkvirtualenv -a /path/to/my-project my-project
lub
workon my-project
cd /path/to/my-project
setvirtualenvproject
Ustawienie projektu spowoduje workon przełączenie polecenia workon na projekt i włączenie polecenia cdproject które umożliwia przejście do katalogu projektu.
Aby zobaczyć listę wszystkich virtualenvs zarządzanych przez virtualenvwrapper, użyj lsvirtualenv .
Aby usunąć virtualenv, użyj rmvirtualenv :
rmvirtualenv my-project
Każdy virtualenv zarządza virtualenvwrapper obejmuje 4 pustych skrypty bash preactivate , postactivate , predeactivate i postdeactivate . Służą one jako zaczepy do wykonywania poleceń bash w określonych punktach cyklu życia virtualenv; na przykład, wszelkie polecenia w skrypcie postactivate będą wykonywane zaraz po aktywacji virtualenv. Byłoby to dobre miejsce do ustawienia specjalnych zmiennych środowiskowych, aliasów lub cokolwiek innego istotnego. Wszystkie 4 skrypty znajdują się w .virtualenvs/<virtualenv_name>/bin/ .
Aby uzyskać więcej informacji, przeczytaj dokumentację virtualenvwrapper .
Odkrywanie używanego środowiska wirtualnego
Jeśli używasz domyślnego monitu bash w Linuksie, powinieneś zobaczyć nazwę środowiska wirtualnego na początku monitu.
(my-project-env) user@hostname:~$ which python
/home/user/my-project-env/bin/python
Określanie konkretnej wersji Pythona do użycia w skrypcie w systemach Unix / Linux
Aby określić, która wersja Pythona powłoka Linux powinna używać pierwszego wiersza skryptów Pythona, może być wierszem shebang, który zaczyna się od #! :
#!/usr/bin/python
Jeśli jesteś w środowisku wirtualnym, to python myscript.py użyje Pythona ze środowiska wirtualnego, ale ./myscript.py użyje interpretera Pythona w #! linia. Aby upewnić się, że używany jest język Python środowiska wirtualnego, zmień pierwszy wiersz na:
#!/usr/bin/env python
Po określeniu linii shebang pamiętaj, aby dać skryptowi uprawnienia do wykonywania, wykonując:
chmod +x myscript.py
Spowoduje to wykonanie skryptu przez uruchomienie ./myscript.py (lub ./myscript.py bezwzględnej ścieżki do skryptu) zamiast python myscript.py lub python3 myscript.py .
Korzystanie z virtualenv z powłoką rybną
Skorupa rybna jest bardziej przyjazna, ale możesz napotkać problemy podczas korzystania z virtualenv lub virtualenvwrapper . Alternatywnie istnieje virtualfish na ratunek. Wystarczy postępować zgodnie z poniższą sekwencją, aby rozpocząć korzystanie z powłoki Fish z virtualenv.
Zainstaluj virtualfish w globalnej przestrzeni
sudo pip install virtualfishZaładuj wirtualną rybę modułu python podczas uruchamiania powłoki ryby
$ echo "eval (python -m virtualfish)" > ~/.config/fish/config.fishEdytuj tę funkcję
fish_promptprzez$ funced fish_prompt --editor vimi dodaj poniższe linie i zamknij edytor vimif set -q VIRTUAL_ENV echo -n -s (set_color -b blue white) "(" (basename "$VIRTUAL_ENV") ")" (set_color normal) " " endUwaga: Jeśli nie
$ funced fish_prompt --editor nano, po prostu podaj swój ulubiony edytor, taki jak$ funced fish_prompt --editor nanolub$ funced fish_prompt --editor gedit
Zapisz zmiany za pomocą
funcsavefuncsave fish_promptAby utworzyć nowe środowisko wirtualne, użyj
vf newvf new my_new_env # Make sure $HOME/.virtualenv existsJeśli chcesz utworzyć nowe środowisko python3, określ je za pomocą opcji
-pvf new -p python3 my_new_envAby przełączać się między środowiskami wirtualnymi, użyj
vf deactivateivf activate another_env
Oficjalne linki:
Tworzenie wirtualnych środowisk za pomocą Anacondy
virtualenv alternatywą dla virtualenv jest Anaconda - wieloplatformowy, podobny do pip menedżer pakietów w pakiecie z funkcjami szybkiego tworzenia i usuwania środowisk wirtualnych. Po zainstalowaniu Anacondy, oto kilka poleceń, aby zacząć:
Utwórz środowisko
conda create --name <envname> python=<version>
gdzie <envname> w dowolnej nazwie dla środowiska wirtualnego, a <version> jest konkretną wersją <envname> Python, którą chcesz skonfigurować.
Aktywuj i dezaktywuj swoje środowisko
# Linux, Mac
source activate <envname>
source deactivate
lub
# Windows
activate <envname>
deactivate
Wyświetl listę utworzonych środowisk
conda env list
Usuń środowisko
conda env remove -n <envname>
Znajdź więcej poleceń i funkcji w oficjalnej dokumentacji conda .
Sprawdzanie, czy działa w środowisku wirtualnym
Czasami monit powłoki nie wyświetla nazwy środowiska wirtualnego i chcesz być pewien, czy jesteś w środowisku wirtualnym, czy nie.
Uruchom interpreter Pythona i spróbuj:
import sys
sys.prefix
sys.real_prefix
Poza wirtualnym,
sys.prefixśrodowiskasys.prefixinstalację systemu w Pythonie, asys.real_prefixnie jest zdefiniowany.W środowisku wirtualnym
sys.prefixwskaże instalację środowiska wirtualnego Python, asys.real_prefixwskaże instalację systemu python.
W środowiskach wirtualnych utworzonych przy użyciu standardowego modułu biblioteki venv nie ma sys.real_prefix . Zamiast tego sprawdź, czy sys.base_prefix jest taki sam jak sys.prefix .