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

Введение

Примеры

  • Создание и использование виртуальной среды

    virtualenv является инструментом для создания изолированных сред Python. Эта программа создает папку, которая содержит все необходимые исполняемые файлы для использования пакетов, необходимых для проекта Python.

    Установка инструмента virtualenv

    Это требуется только один раз. virtualenv программа может быть доступна через распределение. На Debian-подобных дистрибутивов, пакет называется python-virtualenv или python3-virtualenv .

    В качестве альтернативы вы можете установить virtualenv с помощью пип :

     $ 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, необходимые для приложения, с помощью команды install. Условное название для такого файла 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] (https://docs.python.org/3/library/venv.html) будет создавать виртуальные среды. Команда `pyvenv` не требует отдельной установки: $ pyvenv foo $ source foo / bin / activ или $ python3 -m venv foo $ source foo / bin / activ

  • Установка пакетов в виртуальной среде

    После того, как виртуальная среда была активирована, любой пакет , который вы устанавливаете теперь будет устанавливаться в virtualenv и не во всем мире. Следовательно, новые пакеты могут быть без необходимости привилегий root.

    Для того, чтобы убедиться в том , что пакеты устанавливаются в virtualenv выполните следующую команду , чтобы проверить путь к исполняемому файлу , который используется:

     (<Virtualenv Name) $ which python
    /<Virtualenv Directory>/bin/python
    
    (Virtualenv Name) $ which pip
    /<Virtualenv Directory>/bin/pip
    
     

    Любой пакет , затем устанавливается с помощью пипа будет установлен в virtualenv самого в следующем каталоге:

     /<Virtualenv Directory>/lib/python2.7/site-packages/
    
    
    
     

    Кроме того, вы можете создать файл со списком необходимых пакетов.

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

    Так как вы устанавливаете без корня в виртуальной среде, это не глобальная установки, по всей системе - установленный пакет будет доступен только в текущей виртуальной среде.

  • Создание виртуальной среды для другой версии 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 или -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 команды.

     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 может быть притон линией, которая начинается с #! :

     #!/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.

    • Установите virtualfish в глобальное пространство

        sudo pip install virtualfish 
    • Загрузите модуль python virtualfish во время запуска оболочки рыбы

        $ echo "eval (python -m virtualfish)" > ~/.config/fish/config.fish 
    • Edit Эта функция 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 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 
    • Для переключения между virtualenvironments использовать vf deactivate и vf activate another_env

    Официальные ссылки:

    • https://github.com/adambrenecki/virtualfish
    • http://virtualfish.readthedocs.io/en/latest/
  • Создание виртуальных сред с использованием 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>
    
    
     

    Найти больше команд и функций в официальной документации Конда .

  • Проверка, работает ли внутри виртуальной среды

    Иногда приглашение оболочки не отображает имя виртуальной среды, и вы хотите быть уверенным, находитесь ли вы в виртуальной среде или нет.

    Запустите интерпретатор Python и попробуйте:

     import sys
    sys.prefix
    sys.real_prefix
    
     
    • Вне виртуальной, среда sys.prefix будет указывать на установку системы питона и sys.real_prefix не определен.

    Для виртуальных сред создана с использованием стандартной библиотеки модуль venv нет sys.real_prefix . Вместо этого, проверьте sys.base_prefix такое же , как sys.prefix .

Синтаксис

Параметры

Примечания