📦
Хостинг

Виртуальное окружение Python (venv) на хостинге: создание, активация и cron

08.11.2026
← Все статьи

Любой проект на Python — будь то сайт, Telegram-бот или скрипт ежедневного отчёта — опирается на внешние библиотеки. На локальной машине их легко поставить через pip install, а на хостинге прав на установку пакетов в систему у вас нет, да они и не нужны. Эту задачу решает виртуальное окружение, venv: оно создаёт внутри папки проекта отдельную копию Python и собственный набор библиотек. Ниже разберём, как создать venv на хостинге, как им пользоваться и на что обратить внимание, чтобы потом ничего не сломалось.

Зачем нужно виртуальное окружение

На сервере может быть один общий Python, библиотеками которого управляет системный администратор. Если каждый проект будет ставить пакеты в это общее место, обновление пакета для одного проекта легко сломает другой. Виртуальное окружение даёт каждому проекту свою закрытую «коробку»: собственный pip, собственные версии библиотек и собственные настройки. К тому же для создания venv не нужны права администратора, поэтому оно доступно и обычному пользователю хостинга.

Для примера возьмём пекарню в Намангане. Её владелец хочет каждое утро получать в Telegram короткий отчёт о вчерашних заказах. Разработчик написал для этого небольшой Python-скрипт, который использует библиотеки requests и openpyxl. Скрипт запускается на хостинге по cron, а все его библиотеки лежат в venv внутри проекта.

Создание и активация venv

Зайдите на хостинг по SSH, перейдите в папку проекта и создайте виртуальное окружение. Если на сервере несколько версий Python, лучше явно указать нужную: venv навсегда остаётся на той версии, с которой был создан.

cd ~/report
python3 --version
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip

После активации в начале строки терминала появится (venv), а команды python и pip будут относиться к виртуальному окружению. Проверить это просто: which python должна показать путь venv/bin/python внутри проекта. Закончив работу, вернитесь в обычный режим командой deactivate. При локальной работе в Windows команда активации выглядит иначе: venv\Scripts\activate.

Управление библиотеками через requirements.txt

Вместо того чтобы помнить библиотеки по одной, удобно хранить их список в файле requirements.txt. Когда проект готов локально, вы создаёте список, а на сервере устанавливаете из него:

# на локальной машине
pip freeze > requirements.txt

# на сервере, внутри активированного venv
pip install --no-cache-dir -r requirements.txt

pip freeze записывает точные версии, поэтому на сервере ставится тот же набор, что и локально. Параметр --no-cache-dir не сохраняет скачанные пакеты в кеше домашнего каталога. На хостинге объём диска ограничен тарифом, а кеш pip может занимать заметное место, так что этот параметр полезен. Если кеш уже накопился, его очистит команда pip cache purge.

Venv нельзя перенести с другого компьютера

Частая ошибка — загрузить на сервер по FTP папку venv, созданную на своём компьютере. Внутри виртуального окружения прописаны абсолютные пути к Python, который его создал, а некоторые библиотеки содержат файлы, скомпилированные именно под эту операционную систему. У venv, созданного в Windows, даже структура папок другая. Поэтому на сервер загружают только код и requirements.txt, а venv создают на самом сервере. Если используете Git, добавьте строку venv/ в файл .gitignore.

venv в cron и скриптах без активации

Cron не выполняет source venv/bin/activate и ничего не знает о вашей терминальной среде. Но это и не нужно: достаточно вызвать Python из виртуального окружения по полному пути, и он сам найдёт свои библиотеки. Строка cron для отчёта пекарни, который запускается каждый день в 7:30, выглядит так:

30 7 * * * /home/login/report/venv/bin/python /home/login/report/daily.py >> /home/login/report/daily.log 2>&1

Пути здесь приведены для примера, свой домашний каталог можно узнать командой echo $HOME. Учтите, что часовой пояс сервера может отличаться от времени Узбекистана, и при необходимости поправьте час. Перенаправление в конце записывает ошибки в лог-файл, так что, если скрипт перестанет работать, причину вы найдёте там. На обычном хостинге строку cron можно добавить в разделе планировщика панели ISPmanager.

Типичные ошибки и их решение

В некоторых системах Debian и Ubuntu при создании venv появляется ошибка ensurepip is not available. Она означает, что модуль venv не установлен как отдельный пакет. На своём VPS его ставят командой sudo apt install python3-venv, а на обычном хостинге об этом нужно попросить техподдержку. После обновления версии Python старый venv может перестать работать; в таком случае быстрее всего удалить папку venv, создать её заново и переустановить зависимости из requirements.txt.

Помните также, что возможность запускать Python-скрипты на хостинге, доступ по SSH и доступные версии Python зависят от тарифа. Уточните это в кабинете sayt.uz или через техподдержку. Для разовых или запланированных скриптов обычного хостинга может быть достаточно, но для бота или сервиса, который должен работать круглосуточно без остановки, VPS — гораздо более надёжный выбор.

Похожие статьи

📈 Резко выросла нагрузка на сервер: 5 шагов, чтобы найти причину 🤖 Telegram-бот: webhook или polling — что выбрать 💽 Диск заполнен: ошибка 500, повреждённый .htaccess и восстановление базы 🍃 MongoDB: облачный Atlas или собственный сервер — что выбрать
🌐 Язык
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский ✓ 🇬🇧 English