Поиск…


Вступление

Виртуальная среда - это инструмент, позволяющий поддерживать зависимости, требуемые различными проектами в разных местах, путем создания для них виртуальных сред Python. Он решает, что «Project X зависит от версии 1.x, но для Project Y требуется 4.x» дилемма, и держит ваш каталог глобальных пакетов сайтов чистым и управляемым.

Это помогает изолировать среды для разных проектов друг от друга и из ваших системных библиотек.

замечания

Виртуальные среды достаточно полезны, поэтому они, вероятно, должны использоваться для каждого проекта. В частности, виртуальные среды позволяют:

  1. Управление зависимостями без необходимости доступа root
  2. Установите разные версии одной и той же зависимости, например, при работе с различными проектами с различными требованиями
  3. Работа с различными версиями 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.x 3.3

Встроенные виртуальные среды

Начиная с 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 и добавьте ниже строки и закройте редактор vim

     if 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 .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow