Установка и использование virtualenv в Python
virtualenv — это инструмент для создания изолированной среды Python. У такой среды есть отдельна установка python, при ее использовании загруженные библиотеки недоступны другим. Можно сделать так, чтобы у этой среды не было доступа к глобальным библиотекам.
Virtualenv — простой и рекомендованный способ настройки среды Python.
Отличия virtualenv и venv
Venv — это пакет, который идет по умолчанию с Python 3.3+. В версии Python 2 его нет.
Virtualenv — более продвинутая библиотека. По ссылке можно ознакомиться с основными отличиями.
Виртуальную среду можно создать и с помощью venv, но все-таки рекомендуется установить и использовать virtualenv для полноценной работы.
Установка virtualenv с помощью pip
Для установки virtualenv с Python нужно использовать pip. Желательно предварительно обновить этот инструмент.
python -m pip install --upgrade pip
Или используйте python3 , если python ссылается на 2 версию.
После обновления можно установить и virtualenv:
pip install virtualenv # или pip3
Создание виртуальной среды
1. Перейдите в директорию, в которой вы хотите создать виртуальную среду(например папка проекта).
~$ cd test ~/test$
2. Создайте виртуальную среду, при необходимости указав конкретную версию Python. Следующая команда создает virtualenv с именем venv_name и использует флаг -p , чтобы указать полный путь к версии Python:
virtualenv -p /usr/bin/python venv_name # или virtualenv venv_name
Назвать среду можно как угодно
После выполнения команды вы увидите логи:
Running virtualenv with interpreter /usr/bin/python Already using interpreter /usr/bin/python Using base prefix '/usr' New python executable in /home/username/test/venv_name/bin/python Installing setuptools, pip, wheel. done.
Эта команда создает локальную копию среды. Работая с ней, важно не забывать об активации, чтобы использовались нужные версии конкретных инструментов и пакетов.
Если при установке возникла ошибка setuptools pip failed with error code 1` error , используйте следующую команду, чтобы решить проблему:
pip install --upgrade setuptools # или pip3
3. Для активации новой виртуальной среды используйте команду:
source venv_name/bin/activate
После этого название текущей среды отобразится слева от символа ввода: (venv_name) username@desctop:~/test$
Теперь при установке любого пакета с помощью pip он будет размещаться в папках этой среды, изолированно от глобальной установки.
Деактивации virtualenv
После завершения работы деактивировать виртуальную среду можно с помощью команды deactivate .
Введите ее и приставка venv_name пропадет. Вы вернетесь к использованию глобально версии python.
Удаление виртуальной среды
Для удаления виртуальной среды достаточно просто удалить папку проекта. Для этого используется следующая команда:
rm -rf venv_name
Решение популярных ошибок
Ошибки при создании virtualenv. При попытке создать virtualenv с Python 3.7 могут возникнуть следующие ошибки.
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader' OSError: Command /home/username/venv/bin/python3 -c "import sys, pip; sys. d\"] + sys.argv[1:]))" setuptools pip failed with error code 1
Для их исправления нужно добавить следующую строку в .bash_profile.
export LC_ALL="en_US.UTF-8"
Использование полного пути к виртуальной среде. Может быть такое, что при использовании команды virtualenv будет использована не та версия. Для решения проблемы нужно лишь задать полные пути как к virtualenv, так и к Python в системе.
А получить их можно с помощью этой команды:
/home/username/opt/python-3.8.0/bin/virtualenv -p /home/username/opt/python-3.8.0/bin/python3 venv
Как в PyCharm отключить создание виртуального окружения для каждого проекта?
Пока что пользуюсь VSCode с расширением Python от Microsoft, но почему-то не всегда появляются подсказки о том, какие методы и свойства есть у переменной. Решил попробовать PyCharm. Хочу просто открыть его редактор, создать пустой .py файл и писать код с функционалом PyCharm’а, но там при каждом запуске надо создавать проект, либо выбрать уже готовый файл/проект. При создании проекта обязательно создается виртуальное окружение, на моем компе это не быстро. Как отключить принудительное создание виртуального окружения при создании проекта? Чтобы он автоматически использовал основной интерпритатор Python в системе.
Отслеживать
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака
Виртуальные окружения — Python: Настройка окружения
Вы уже знаете, что pip устанавливает пакеты в одно из двух окружений — в общесистемное или пользовательское. Интерпретатор Python при импорте модуля или пакета ищет его сначала в пользовательском окружении, затем — в общесистемном. Такая последовательность позволяет пользователю иметь нужные именно ему версии библиотек и Python-программ.
Но даже двух окружений недостаточно, когда программист начинает работать с несколькими проектами, ведь разные проекты могут иметь разные наборы зависимостей. Еще более тяжелый случай: разные проекты могут зависеть от общей библиотеки, но требовать разные ее версии — тогда происходит конфликт версий.
Очевидно, что разработчику на Python нужен какой-то механизм, позволяющий содержать разные проекты в изолированных песочницах. Такой механизм существует. Он называется виртуальные окружения.
Устройство виртуальных окружений
Каждое виртуальное окружение представляет собой директорию. Ее содержимое структурно напоминает общесистемное окружение — поддиректории соответственно названы и наполнены. Давайте рассмотрим пример:
env env ├── bin │ ├── activate │ … │ ├── pip │ … │ └── python3 -> …/python3 ├── lib │ └── python3.6 │ └── site-packages │ ├── pip │ │ ├── … │ … │ └── setuptools-40.6.2.dist-info │ ├── … …
В директории виртуального окружения находится директория bin/ , внутри которой расположены:
- Копия интерпретатора под именем python3 (символическая ссылка на оригинал)
- Копия исполняемого файла pip
В соседней директории по пути lib/python3.6/site-packages есть библиотеки, уже установленные в окружение. Как правило, только что созданное окружение имеет:
- Установленный пакет pip (исполняемый файл bin/pip — его точка входа)
- Пакет Setuptools
Эти два пакета составляют необходимый минимум для разработки проекта на Python.
При работе в окружении нужно запускать не системные Python и pip, а исполняемые файлы из директории bin . Когда интерпретатор Python находится в окружении, он знает, где находятся все доступные пакеты. Интерпретатор находит их по относительному пути ../lib/python3.6 . В таком случае копия pip из директории bin/ устанавливает пакеты в это же окружение, не затрагивая систему. Получается та самая изоляция, о которой мы говорили в начале урока.
Создание виртуального окружения
Вручную создавать всю описанную иерархию директорий и файлов не нужно — для этого есть специальный модуль venv .
В macOS и Windows этот модуль входит в поставку Python. На Ubuntu его нужно установить отдельно командой:
sudo apt install python3-venv
Проверим, что модуль установился и готов к использованию:
-m venv --help usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip] [--prompt PROMPT] ENV_DIR [ENV_DIR . ]
Обычно окружение создается командой python3 -m venv имя_окружения . Давайте попробуем создать виртуальное окружение и установить туда пакет cowsay :
Вы можете видеть, что пакет устанавливается вместе с точкой входа, которую можно вызвать командой first_venv/bin/cowsay . Также сам пакет становится доступен интерпретатору, но только тому, что был запущен из окружения.
В таком виде виртуальное окружение уже можно использовать полноценно. Но постоянно вводить команды с префиксом first_venv/bin/ не очень удобно. Есть способ упростить вызов команд, доступных в окружении — это активация.
Активация окружения
При создании окружения в поддиректорию bin помещается сценарий оболочки, который на macOS и Ubuntu называется activate , а на Windows — activate.bat . Чтобы выполнить этот сценарий, нужно вызвать команду:
- на macOS и Ubuntu:
source first_venv/bin/activate
- на Windows:
\> first_venv\Scripts\activate.bat
В команде выше обратите внимание, что в Windows поддиректория с исполняемыми файлами называется не bin , а Scripts .
На Ubuntu активация выглядит следующим образом:
После активации отпала необходимость указывать путь до вызываемого исполняемого файла. Теперь cowsay и python вызываются без префикса, но это все те же команды из окружения.
Еще изменилось приглашение оболочки: в нем стало отображаться имя окружения. Это работает на macOS и Ubuntu и всегда напоминает, что мы находимся в виртуальном окружении.
Деактивация окружения делается командой deactivate , которая становится доступна после активации.
Активация и деактивация окружения влияют только на текущую сессию — то есть заметны только в этом конкретном терминале. Это удобно, потому что так можно иметь несколько окружений и активировать их одновременно в разных окнах терминала.
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Python: установка virtualenv
Виртуальное окружение virtualenv — это инструмент, позволяющий создавать изолированные среды для отдельных проектов Python, решая тем самым проблему зависимостей и совместимости приложений разных версий. Подробнее о виртуальном окружении Python можно прочитать в официальной документации .
После установки virtualenv вы можете использовать pip для установки библиотек Python.
В зависимости от ваших задач установку можно выполнить в домашнюю директорию или в директорию конкретного сайта.
- Версии Python
- Установка в корень аккаунта
- Установка в конкретный каталог
- Использование PIP
- Основные команды pip
- Файл requirements.txt
- Восстановление виртуального окружения с помощью requirements.txt
- No module named ‘имя_модуля’
- Target WSGI script ‘/путь/до/скрипта/index.wsgi’ cannot be loaded as Python module
- DisallowedHost at / Invalid HTTP_HOST header
- AttributeError: module ‘MySQLdb.constants.FIELD_TYPE’ has no attribute ‘JSON’
- The SECRET_KEY setting must not be empty
Версии Python
По умолчанию на наших серверах доступны версии Python 2 и Python 3.6, но вы также можете использовать версию Python 3.5.
Проверить версии Python на сервере можно с помощью команд:
# Версии Python 2:
python -V
# Версии Python 3:
python3 -VВерсии Python обратно совместимы, то есть приложение, написанное на 3.6, скорее всего, будет работать под 3.7, и так далее. Однако не всегда код, написанный на новых версиях, будет корректно работать на старых версиях из-за возможного нового синтаксиса и функций языка. Также обратите внимание, что Python 2 и Python 3 несовместимы между собой.
При создании виртуального окружения нужно использовать корректное имя интерпретатора, в зависимости от нужной вам версии Python:
# Если требуется Python2:
python virtualenv.pyz venv
# Если требуется Python3.5:
python3.5 virtualenv.pyz venv
# Если требуется Python3.6:
python3.6 virtualenv.pyz venvТаким образом, при выполнении команды:
python3 virtualenv.pyz venvокружение будет содержать интерпретатор Python3. Если вам нужна версия 2, то необходимо вызывать python :
python virtualenv.pyz venvОбратите внимание, что в виртуальном окружении доступна только та версия Python 3 , которая была выбрана при создании виртуального окружения. Например, запустить скрипт через Python 3.5 в виртуальном окружении, созданном через Python 3.6, не получится:
(env) $ python3.5 --version
Command 'python3.5' not foundПри этом Python 2 будет доступен:
(env) $ python2 --version
Python 2.7.17Проверить версию Python в созданном виртуальном окружении можно командой:
(env) $ python --version
Python 3.6.9Установка в корень аккаунта
Установить одну из последних версий виртуального окружения в корень аккаунта можно по инструкции ниже.
- Скачать virtualenv , указав в команде нужную версию Python.
wget https://bootstrap.pypa.io/virtualenv/X.X/virtualenv.pyzНапример, для Python 3.6:
wget https://bootstrap.pypa.io/virtualenv/3.6/virtualenv.pyz- Создать виртуальное окружение, используя нужную версию Python . Например:
# Если требуется Python3:
python3 virtualenv.pyz venv
# Если требуется Python2:
python virtualenv.pyz venvПри этом будет создана директория venv , из которой будет запускаться виртуальное окружение (имя директории можно задать любое).
- Активировать виртуальное окружение:
source venv/bin/activateДалее вы можете приступить к установке библиотек с помощью pip . После отключить виртуальное окружение можно командой deactivate .
Установка в конкретный каталог
Если виртуальное окружение требуется для конкретного сайта , можно установить его в соответствующий каталог public_html :
- Перейти в нужный каталог (вместо u и user укажите первую букву логина и сам логин):
cd /home/u/user/директория_сайта/public_html- Скачать virtualenv , указав нужную версию Python:
wget https://bootstrap.pypa.io/virtualenv/X.X/virtualenv.pyzНапример, для Python 3.6:
wget https://bootstrap.pypa.io/virtualenv/3.6/virtualenv.pyz- Создать виртуальное окружение, используя нужную версию Python . Например:
# Если требуется Python 3:
python3 virtualenv.pyz venv
# Если требуется Python 2:
python virtualenv.pyz venvПри этом будет создана директория venv, из которой будет запускаться виртуальное окружение (имя директории можно задать любое).
- Активировать виртуальное окружение (вместо u и user укажите первую букву логина и сам логин):
source /home/u/user/директория_сайта/public_html/venv/bin/activateДалее вы можете приступить к установке библиотек с помощью pip . После отключить виртуальное окружение можно командой deactivate .
Использование PIP
PIP — система управления пакетами для установки и управления программными пакетами на Python.
Основные команды pip
# Установка пакета
pip install имя_пакета
# Обновление пакета
pip install -U имя_пакета
# Удаление пакета
pip uninstall имя_пакета — удаление пакета
# Вывод установленных пакетов
pip freeze
# Просмотр версии pip
pip --version
# Обновление pip
pip install -U pipФайл requirements.txt
Файл содержит вывод команды pip freeze и является списком зависимостей, которые необходимо установить в виртуальное окружение для работы приложения.
Пример содержимого requirements.txt :
asgiref==3.4.1
Django==3.2.7
pytz==2021.1
sqlparse==0.4.2
typing-extensions==3.10.0.2- Django — имя пакета;
- 3.2.7 — версия пакета.
Вместо обозначения == может встретиться >= , что означает версию равную или выше.
Восстановление виртуального окружения с помощью requirements.txt
С помощью requirements.txt можно выполнить рекурсивную установку пакетов. В этом случае нет необходимости устанавливать пакеты вручную.
Выполнить установку можно командой:
pip install -r requirements.txtВозможные ошибки
No module named ‘имя_модуля’
Ошибка сообщает о том, что импортируемый в коде модуль не установлен. Пример сообщения в логе об ошибке:
plain.webtm.ru [Tue Jul 07 06:18:52 2020] [error] [pid 74988] src/server/wsgi_logger.c(147): [client 5.16.118.157:33342] import pygame
plain.webtm.ru [Tue Jul 07 06:18:52 2020] [error] [pid 74988] src/server/wsgi_logger.c(147): [client 5.16.118.157:33342] ModuleNotFoundError: No module named 'pygame'Если вы уверены, что модуль установлен, но ошибка все равно возникает, необходимо проверить корректность путей в файле index.wsgi и указать в скрипте корректный путь до интерпретатора Python.
Например, если виртуальное окружение было установлено в директорию /mysite/public_html , в начало скрипта необходимо добавить строку:
#!/home/u/user/mysite/public_html/venv/bin/python3.6Также следует убедиться, что используется нужная версия пакетов или самого Python.
Target WSGI script ‘/путь/до/скрипта/index.wsgi’ cannot be loaded as Python module
Возникает при неправильной настройке файла index.wsgi .
Необходимо сверить файл с инструкциями по ссылкам: Django , Flask .
DisallowedHost at / Invalid HTTP_HOST header
Для устранения ошибки необходимо указать доменное имя в качестве переменной в файле /имя_проекта/settings.py , например:
ALLOWED_HOSTS = ['example.com']Для работы сайта от любого домена нужно указать символ * :
ALLOWED_HOSTS = ['*']AttributeError: module ‘MySQLdb.constants.FIELD_TYPE’ has no attribute ‘JSON’
Необходимо обновить mysqlclient командой:
pip install -U mysqlclientThe SECRET_KEY setting must not be empty
Нужно проверить корректность указанного имени модуля настроек в wsgi-скрипте или наличие SECRET_KEY в файле settings.py .
Пример сообщения об ошибке в логе:
Jan 28 02:12:27 vh328 apache_error[58945]: ce05390-django.tw1.ru [Thu Jan 28 02:12:27 2021] [error] [pid 35894] src/server/wsgi_logger.c(147): [client 188.163.65.63:37230] django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
