Развертывание 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
.