为什么我的 Python 路径配置在 Apache 中没有改变

Why is my Python path configuration not changing in Apache

我正在尝试在 Windows 上设置 Apache 2.4 以使用 Django 项目。作为第一次尝试,我只制作了一个显示 Django“欢迎火箭”的基础应用程序。

配置Apache的httpd.conf文件后,出现众所周知的错误ModuleNotFoundError: No module named 'encodings'。我尝试了 here 的所有建议。遗憾的是,none 的想法产生了影响。

我最终在配置文件中使用了以下行:

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"

在此过程中,我注意到打印到 error.log 文件的 python 路径配置从未改变,无论我在上面的行中使用了哪个路径。这是日志中的一个片段:

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 安装。如果我的期望是正确的,那么错误路径配置的原因可能是什么?

只看配置的前两行:

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 和为 python310 编译的 cp310 - 这总是会造成麻烦。

此外,WSGIPythonPath 应该指向您找到 Django 应用程序的目录(在标准的 Django 结构中,您还可以找到 manage.py)。