Python: установка virtualenv
Виртуальное окружение virtualenv
— это инструмент, позволяющий создавать изолированные среды для отдельных проектов Python, решая тем самым проблему зависимостей и совместимости приложений разных версий. Подробнее о виртуальном окружении Python можно прочитать в официальной документации.
После установки virtualenv
вы можете использовать pip
для установки библиотек Python.
В зависимости от ваших задач установку можно выполнить в домашнюю директорию или в директорию конкретного сайта.
- Версии Python
- Установка в корень аккаунта
- Установка в конкретный каталог
- Использование PIP
- Возможные ошибки
Версии 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 mysqlclient
The 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.