Python Language
Виртуальные среды
Поиск…
Вступление
Виртуальная среда - это инструмент, позволяющий поддерживать зависимости, требуемые различными проектами в разных местах, путем создания для них виртуальных сред Python. Он решает, что «Project X зависит от версии 1.x, но для Project Y требуется 4.x» дилемма, и держит ваш каталог глобальных пакетов сайтов чистым и управляемым.
Это помогает изолировать среды для разных проектов друг от друга и из ваших системных библиотек.
замечания
Виртуальные среды достаточно полезны, поэтому они, вероятно, должны использоваться для каждого проекта. В частности, виртуальные среды позволяют:
- Управление зависимостями без необходимости доступа root
- Установите разные версии одной и той же зависимости, например, при работе с различными проектами с различными требованиями
- Работа с различными версиями python
Создание и использование виртуальной среды
virtualenv
- это инструмент для создания изолированных сред Python. Эта программа создает папку, которая содержит все необходимые исполняемые файлы для использования пакетов, которые потребуются для проекта Python.
Установка инструмента virtualenv
Это требуется только один раз. Программа virtualenv
может быть доступна через ваш дистрибутив. В Debian-подобных дистрибутивах пакет называется python-virtualenv
или python3-virtualenv
.
Вы также можете установить virtualenv
с помощью pip :
$ pip install virtualenv
Создание новой виртуальной среды
Это требуется только один раз для каждого проекта. При запуске проекта, для которого вы хотите изолировать зависимости, вы можете настроить новую виртуальную среду для этого проекта:
$ virtualenv foo
Это создаст папку foo
содержащую скрипты инструментов и копию самого бинарного кода python
. Имя папки не имеет значения. После создания виртуальной среды он является автономным и не требует дальнейшей манипуляции с инструментом virtualenv
. Теперь вы можете начать использовать виртуальную среду.
Активация существующей виртуальной среды
Чтобы активировать виртуальную среду, требуется магия оболочки, поэтому ваш Python - это один внутри foo
а не системный. Это цель activate
файла, который вы должны указать в текущую оболочку:
$ source foo/bin/activate
Пользователи Windows должны ввести:
$ foo\Scripts\activate.bat
Как только виртуальная среда активирована, бинарные файлы python
и pip
и все скрипты, установленные сторонними модулями, являются внутри foo
. В частности, все модули, установленные с помощью pip
будут развернуты в виртуальной среде, что позволит создать среду разработки. Активация виртуальной среды также должна добавить префикс к вашему приглашению, как показано в следующих командах.
# Installs 'requests' to foo only, not globally
(foo)$ pip install requests
Сохранение и восстановление зависимостей
Чтобы сохранить модули, которые вы установили через pip
, вы можете перечислить все эти модули (и соответствующие версии) в текстовый файл с помощью команды freeze
. Это позволяет другим пользователям быстро устанавливать модули Python, необходимые для приложения, с помощью команды установки. Обычным именем для такого файла является файл requirements.txt
:
(foo)$ pip freeze > requirements.txt
(foo)$ pip install -r requirements.txt
Обратите внимание, что freeze
перечисляет все модули, включая переходные зависимости, требуемые модулями верхнего уровня, которые вы установили вручную. Таким образом, вы можете создать файл requirements.txt
вручную , разместив только модули верхнего уровня, которые вам нужны.
Выход из виртуальной среды
Если вы закончили работу в виртуальной среде, вы можете деактивировать ее, чтобы вернуться к нормальной оболочке:
(foo)$ deactivate
Использование виртуальной среды на общем хосте
Иногда невозможно $ source bin/activate
virtualenv, например, если вы используете mod_wsgi на общем хосте или если у вас нет доступа к файловой системе, например, в Amazon API Gateway или Google AppEngine. В этих случаях вы можете развернуть библиотеки, которые вы установили в своем локальном virtualenv, и исправить свой sys.path
.
Luckly virtualenv поставляется со сценарием, который обновляет ваш sys.path
и ваш 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))
Вы должны добавить эти строки в самом начале файла, который будет выполнять ваш сервер.
Это найдет bin/activate_this.py
что virtualenv
создал файл в том же каталоге, который вы выполняете, и добавьте ваши файлы lib/python2.7/site-packages
в sys.path
Если вы хотите использовать скрипт activate_this.py
, не забудьте развернуть, по крайней мере, каталоги bin
и lib/python2.7/site-packages
и их содержимое.
Встроенные виртуальные среды
Начиная с Python 3.3, модуль venv будет создавать виртуальные среды. Команда pyvenv
не требует установки отдельно:
$ pyvenv foo
$ source foo/bin/activate
или же
$ python3 -m venv foo
$ source foo/bin/activate
Установка пакетов в виртуальной среде
После активации вашей виртуальной среды любой пакет, который вы установите, теперь будет установлен в virtualenv
и не глобально. Следовательно, новые пакеты могут не нуждаться в привилегиях root.
Чтобы убедиться в том, что пакеты устанавливаются в virtualenv
выполните следующую команду, чтобы проверить путь к исполняемому файлу, который используется:
(<Virtualenv Name) $ which python
/<Virtualenv Directory>/bin/python
(Virtualenv Name) $ which pip
/<Virtualenv Directory>/bin/pip
Любой пакет, установленный с помощью pip, будет установлен в самом virtualenv
каталоге в следующем каталоге:
/<Virtualenv Directory>/lib/python2.7/site-packages/
Кроме того, вы можете создать файл с перечислением необходимых пакетов.
Требования.txt :
requests==2.10.0
Выполнение:
# Install packages from requirements.txt
pip install -r requirements.txt
будет устанавливать версию 2.10.0 requests
пакета.
Вы также можете получить список пакетов и их версий, установленных в активной виртуальной среде:
# 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
Кроме того, вам не нужно активировать свою виртуальную среду каждый раз, когда вам нужно установить пакет. Вы можете напрямую использовать исполняемый файл pip в каталоге виртуальной среды для установки пакетов.
$ /<Virtualenv Directory>/bin/pip install requests
Более подробную информацию об использовании pip можно найти в теме PIP .
Поскольку вы устанавливаете без root в виртуальной среде, это не глобальная установка, а во всей системе - установленный пакет будет доступен только в текущей виртуальной среде.
Создание виртуальной среды для другой версии python
Предполагая, что python
и python3
установлены, можно создать виртуальную среду для Python 3, даже если python3
не является Python по умолчанию:
virtualenv -p python3 foo
или же
virtualenv --python=python3 foo
или же
python3 -m venv foo
или же
pyvenv foo
На самом деле вы можете создать виртуальную среду на основе любой версии рабочего питона вашей системы. Вы можете проверить различные рабочие питоны под вашим /usr/bin/
или /usr/local/bin/
(в Linux) ИЛИ в /Library/Frameworks/Python.framework/Versions/XX/bin/
(OSX), затем выяснить имя и использование, которые --python
флаге --python
или -p
при создании виртуальной среды.
Управление несколькими виртуальными средами с помощью virtualenvwrapper
Утилита virtualenvwrapper
упрощает работу с виртуальными средами и особенно полезна, если вы имеете дело со многими виртуальными средами / проектами.
Вместо того, чтобы иметь дело с каталогами виртуальной среды самостоятельно, virtualenvwrapper
управляет ими для вас, сохраняя все виртуальные среды под центральным каталогом ( ~/.virtualenvs
по умолчанию).
Монтаж
Установите virtualenvwrapper
с диспетчером пакетов вашей системы.
Debian / Ubuntu на основе:
apt-get install virtualenvwrapper
Fedora / CentOS / RHEL:
yum install python-virtualenvrwapper
Arch Linux:
pacman -S python-virtualenvwrapper
Или установите его из PyPI с помощью pip
:
pip install virtualenvwrapper
В Windows вы можете использовать либо virtualenvwrapper-win
либо virtualenvwrapper-powershell
.
использование
Виртуальные среды создаются с помощью mkvirtualenv
. Также принимаются все аргументы исходной команды virtualenv
.
mkvirtualenv my-project
или, например,
mkvirtualenv --system-site-packages my-project
Новая виртуальная среда автоматически активируется. В новых оболочках вы можете включить виртуальную среду с помощью workon
workon my-project
Преимущество команды workon
по сравнению с традиционным . path/to/my-env/bin/activate
- команда workon
будет работать в любом каталоге; вам не нужно помнить, в каком каталоге хранится конкретная виртуальная среда вашего проекта.
Проекты
Вы даже можете указать каталог проекта во время создания виртуальной среды с параметром -a
или позже с setvirtualenvproject
команды setvirtualenvproject
.
mkvirtualenv -a /path/to/my-project my-project
или же
workon my-project
cd /path/to/my-project
setvirtualenvproject
Настройка проекта приведет к тому, что команда workon
автоматически переключится на проект и включит команду cdproject
которая позволит вам перейти на каталог проекта.
Чтобы просмотреть список всех virtualenvs, управляемых virtualenvwrapper, используйте lsvirtualenv
.
Чтобы удалить virtualenv, используйте rmvirtualenv
:
rmvirtualenv my-project
Каждый virtualenv управляется virtualenvwrapper включает 4 пустые Баши скриптов: preactivate
, postactivate
, predeactivate
и postdeactivate
. Они служат в качестве крючков для выполнения команд bash в определенных точках жизненного цикла virtualenv; например, любые команды в сценарии postactivate
будут выполняться сразу после активации virtualenv. Это было бы хорошим местом для установки специальных переменных среды, псевдонимов или чего-то еще значимого. Все 4 скрипта находятся под .virtualenvs/<virtualenv_name>/bin/
.
Для получения дополнительной информации прочтите документацию virtualenvwrapper .
Обнаружение той виртуальной среды, которую вы используете
Если вы используете подсказку bash
по умолчанию в Linux, вы должны увидеть имя виртуальной среды в начале вашего приглашения.
(my-project-env) user@hostname:~$ which python
/home/user/my-project-env/bin/python
Указание конкретной версии python для использования в скрипте в Unix / Linux
Чтобы указать, какая версия python для оболочки Linux должна использовать первую строку скриптов Python, может быть строка shebang, которая начинается с #!
:
#!/usr/bin/python
Если вы находитесь в виртуальной среде, то python myscript.py
будет использовать Python из вашей виртуальной среды, но ./myscript.py
будет использовать интерпретатор Python в #!
линия. Чтобы убедиться, что используется Python виртуальной среды, измените первую строку на:
#!/usr/bin/env python
После указания строки shebang не забудьте предоставить разрешения на выполнение сценария, выполнив:
chmod +x myscript.py
Это позволит вам выполнить сценарий, запустив ./myscript.py
(или предоставив абсолютный путь к скрипту) вместо python myscript.py
или python3 myscript.py
.
Использование virtualenv с рыбным снарядом
Оболочка рыбы дружелюбнее, но вы можете столкнуться с проблемами при использовании с virtualenv
или virtualenvwrapper
. Альтернативно для спасения существует virtualfish
. Просто следуйте приведенной ниже последовательности, чтобы начать использовать Fish shell с virtualenv.
Установка виртуальной сети в глобальное пространство
sudo pip install virtualfish
Загрузите виртуальный модуль python во время запуска оболочки рыбы
$ echo "eval (python -m virtualfish)" > ~/.config/fish/config.fish
Измените эту функцию
fish_prompt
на$ funced fish_prompt --editor vim
и добавьте ниже строки и закройте редактор vimif set -q VIRTUAL_ENV echo -n -s (set_color -b blue white) "(" (basename "$VIRTUAL_ENV") ")" (set_color normal) " " end
Примечание. Если вы не знакомы с vim, просто
$ funced fish_prompt --editor nano
свой любимый редактор, как этот$ funced fish_prompt --editor nano
или$ funced fish_prompt --editor gedit
Сохранить изменения, используя
funcsave
funcsave fish_prompt
Чтобы создать новую виртуальную среду, используйте
vf new
vf new my_new_env # Make sure $HOME/.virtualenv exists
Если вы хотите создать новую среду python3, укажите ее через флаг
-p
vf new -p python3 my_new_env
Для переключения между виртуальными средами используйте
vf deactivate
иvf activate another_env
Официальные ссылки:
Создание виртуальных сред с помощью Anaconda
Мощная альтернатива virtualenv
является Анаконда - кросс-платформенной, pip
- менеджером -как пакет в комплекте с функциями для быстрого создания и удаления виртуальных сред. После установки Anaconda, вот несколько команд для запуска:
Создание среды
conda create --name <envname> python=<version>
где <envname>
в произвольном имени вашей виртуальной среды, а <version>
- это конкретная версия Python, которую вы хотите настроить.
Активировать и деактивировать среду
# Linux, Mac
source activate <envname>
source deactivate
или же
# Windows
activate <envname>
deactivate
Просмотр списка созданных сред
conda env list
Удаление среды
conda env remove -n <envname>
Найдите больше команд и функций в официальной документации на conda .
Проверка работы внутри виртуальной среды
Иногда приглашение оболочки не отображает имя виртуальной среды, и вы хотите быть уверенным, находитесь ли вы в виртуальной среде или нет.
Запустите интерпретатор python и попробуйте:
import sys
sys.prefix
sys.real_prefix
Вне виртуальной среды
sys.prefix
указывает на установку системы python иsys.real_prefix
не определен.Внутри виртуальной среды
sys.prefix
укажет на установку виртуальной среды python, аsys.real_prefix
укажет на установку системы python.
Для виртуальных сред, созданных с использованием стандартного модуля библиотеки venv , нет sys.real_prefix
. Вместо этого проверьте, является ли sys.base_prefix
таким же, как sys.prefix
.