Почему моя конфигурация пути Python не изменяется в Apache
Я пытаюсь настроить Apache 2.4 под Windows для работы с проектом Django. В качестве первой попытки я сделал просто базовое приложение, демонстрирующее "приветственную ракету" Django.
После настройки файла httpd.conf Apache появляется хорошо известная ошибка ModuleNotFoundError: No module named 'encodings'. Я перепробовал все предложения из здесь. К сожалению, ни одна из идей не возымела эффекта.
В итоге я использовал следующую строку в конфигурационном файле:
LoadFile "C:/Python/Python37/python37.dll"
LoadModule wsgi_module "D:/Projects/TestProject/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win_amd64.pyd"
WSGIPythonHome "D:/Projects/TestProject/venv/Scripts"
WSGIPythonPath "D:/Projects/TestProject/venv/Lib;D:/Projects/TestProject/venv/Lib/site-packages;C:/Python/Python37/DLLs"
WSGIScriptAlias / "D:/Projects/TestProject/venv/backend/backend/wsgi.py"
Во время этого процесса я заметил, что конфигурация пути python, выводимая в файл error.log, никогда не менялась, независимо от того, какие пути я использовал в строках выше. Вот фрагмент из журнала:
Python path configuration:
PYTHONHOME = (not set)
PYTHONPATH = (not set)
program name = 'python'
isolated = 0
environment = 1
user site = 1
import site = 1
sys._base_executable = 'C:\\Apache24\\bin\\httpd.exe'
sys.base_prefix = 'C:\\Users\\myuser\\AppData\\Local\\Programs\\Python\\Python310'
sys.base_exec_prefix = 'C:\\Users\\myuser\\AppData\\Local\\Programs\\Python\\Python310'
sys.platlibdir = 'lib'
sys.executable = 'C:\\Apache24\\bin\\httpd.exe'
sys.prefix = 'C:\\Users\\myuser\\AppData\\Local\\Programs\\Python\\Python310'
sys.exec_prefix = 'C:\\Users\\myuser\\AppData\\Local\\Programs\\Python\\Python310'
sys.path = ['C:\\Users\\myuser\\AppData\\Local\\Programs\\Python\\Python310\\python310.zip',
'.\\DLLs',
'.\\lib',
'C:\\Apache24\\bin',
]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'
При указанных выше настройках (LoadFile, WSGIPythonPath и т.д.) я ожидал, что sys.base_prefix будет указывать на мою папку Pyhton 3.7, а не на установку Python 310. Если мои ожидания верны, каковы могут быть причины неправильной конфигурации путей?
просто посмотрите на первые две строки config:
LoadFile "C:/Python/Python37/python37.dll"
LoadModule wsgi_module "D:/Projects/TestProject/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win_amd64.pyd"
Вы используете две разные версии для установки Apache при старте: python37 и cp310, который скомпилирован для python310 - это всегда вызывает проблемы.
Дополнительно WSGIPythonPath должен указывать на каталог, где вы находите ваши django приложения (в стандартной структуре django это каталог, где вы также находите manage.py).