Развертывание Django и виртуальная среда

Я знаю, что существует много вопросов относительно Django и виртуальных сред, но я не могу разобраться с использованием виртуальных сред для развертывания моего приложения Django (локально) через uwsgi/nginx.

Моя установка включает виртуальную среду (с Django и uwsgi), мое приложение Django, nginx и PostgreSQL. Приложение было создано до виртуальной среды, и я применил только одно изменение в manage.py:

#!/Users/snafu/virtualdjango/bin/python3

Когда я запускаю uwsgi, расположенный в виртуальной среде (с соответствующим файлом .ini), все сразу же работает, но я задаюсь вопросом, почему. Мне не пришлось возиться с $PYTHONPATH, или добавлять каталог пакетов сайта к системному пути в manage.py, или активировать виртуальную среду в любой момент (кроме начальной установки пакетов), хотя в комментарии к шаблону в manage.py явно упоминается неактивная виртуальная среда как возможная причина ошибки импорта.

Активация виртуальной среды не делает ничего, кроме как добавляет bin/ виртуальной среды к $PATH, делая python и pip без явных путей, идущих от виртуальной среды. Все остальное, связанное с виртуальными средами, реализовано внутри Python - он автоматически изменяет sys.path и другие пути (sys.prefix, sys.exec_prefix и т.д.).

Это означает, что когда вы запускаете python с абсолютным путем из виртуальной среды, Python автоматически активирует виртуальную среду для данной конкретной сессии Python. Поэтому вам не нужно активировать виртуальную среду явно.

Однако на дороге есть небольшой предупреждающий знак: чтобы запустить любой сценарий Python из неактивированной виртуальной среды, вы должны установить шебанг для всех сценариев, чтобы он указывал на виртуальную среду, или использовать sys.executable. Не используйте явный python, потому что это может быть другой Python, отличный от $PATH.

Вернуться на верх