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ą:

  1. Zarządzaj zależnościami bez konieczności dostępu do konta root
  2. Zainstaluj różne wersje tej samej zależności, na przykład podczas pracy nad różnymi projektami o różnych wymaganiach
  3. 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.

Python 3.x 3.3

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 virtualfish
    
  • Załaduj wirtualną rybę modułu python podczas uruchamiania powłoki ryby

     $ echo "eval (python -m virtualfish)" > ~/.config/fish/config.fish
    
  • Edytuj tę funkcję fish_prompt przez $ funced fish_prompt --editor vim i dodaj poniższe linie i zamknij edytor vim

     if set -q VIRTUAL_ENV
         echo -n -s (set_color -b blue white) "(" (basename "$VIRTUAL_ENV") ")" (set_color normal) " "
     end
    

    Uwaga: Jeśli nie $ funced fish_prompt --editor nano , po prostu podaj swój ulubiony edytor, taki jak $ funced fish_prompt --editor nano lub $ funced fish_prompt --editor gedit

  • Zapisz zmiany za pomocą funcsave

     funcsave fish_prompt
    
  • Aby utworzyć nowe środowisko wirtualne, użyj vf new

     vf new my_new_env # Make sure $HOME/.virtualenv exists
    
  • Jeśli chcesz utworzyć nowe środowisko python3, określ je za pomocą opcji -p

     vf new -p python3 my_new_env
    
  • Aby przełączać się między środowiskami wirtualnymi, użyj vf deactivate i vf 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 środowiska sys.prefix instalację systemu w Pythonie, a sys.real_prefix nie jest zdefiniowany.

  • W środowisku wirtualnym sys.prefix wskaże instalację środowiska wirtualnego Python, a sys.real_prefix wskaż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 .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow