我发现了许多类似的文章,其中有一些文章都存在类似的问题,其中几篇的结论是,Apache 服务根本无法在我的环境中运行。但是我确实让该服务运行了——只是它需要的设置不符合安全要求。
情况是:我有一个 Django 4.2.9 项目,托管在 Apache 2.4 中,使用 mod_wsgi 5.0.0,全部在 Windows 2016 Server 上。
当我从服务器帐户的命令行运行 Apache 时Administrator
,它运行完美。
当我使用 安装 Apache 2.4 服务httpd.exe -k install
,然后手动重新配置该服务以作为 登录时.\Administrator
,它也能完美运行。
但是,如果我以 身份登录LocalSystem
或以任何其他用户帐户登录来运行该服务,则该服务将无法启动。 (旁注:我已确认所有帐户都启用了“作为服务登录”的权限,所以这不是问题。) 错误如下图所示:
并且-- 如果我尝试httpd.exe
从其他用户帐户的命令行运行,则可执行文件会失败。日志文件中生成的错误是:
[Fri Jan 05 14:28:08.201284 2024] [wsgi:info] [pid 5712:tid 372] mod_wsgi (pid=5712): Initializing 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 = 'D:\\Program Files\\Apache24\\bin\\httpd.exe'
sys.base_prefix = 'C:\\Program Files\\Python310'
sys.base_exec_prefix = 'C:\\Program Files\\Python310'
sys.platlibdir = 'lib'
sys.executable = 'D:\\Program Files\\Apache24\\bin\\httpd.exe'
sys.prefix = 'C:\\Program Files\\Python310'
sys.exec_prefix = 'C:\\Program Files\\Python310'
sys.path = [
'C:\\Program Files\\Python310\\python310.zip',
'.\\DLLs',
'.\\lib',
'D:\\Program Files\\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'
Current thread 0x000011d8 (most recent call first): <no Python frame>
[Fri Jan 05 14:28:08.217284 2024] [mpm_winnt:crit] [pid 4432:tid 368] AH00419: master_main: create child process failed. Exiting.
因此,这里的共同因素似乎是它适用于该Administrator
帐户,但不适用于任何其他帐户。我只是不知道为什么……或者如何纠正它。
mod_wsgi-express module-config
进一步的相关信息:这是我从命令中获取并粘贴到我的httpd.conf
文件中的wsgi 配置信息:
LoadFile "C:/Program Files/Python310/python310.dll"
LoadModule wsgi_module "D:/CSCatalog/django-projects/code/cscr/.venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win_amd64.pyd"
WSGIPythonHome "D:/CSCatalog/django-projects/code/cscr/.venv"
答案1
Python path configuration: PYTHONHOME = (not set) PYTHONPATH = (not set) [...] ModuleNotFoundError: No module named 'encodings'
是错误消息。encodings
是一个系统模块,因此它应该在默认安装路径中可用。
我猜测 Adminsitrator 用户有环境变量PYTHONPATH
设置,但其他用户没有,因此出现错误消息。
你可以为服务设置环境变量。