Windows下Apache+mod_wsgi运行Flask时dateutil模块找不到错误
验证Apache使用的Python路径
在你的server.wsgi文件开头添加以下代码:import sys import traceback try: import dateutil print("dateutil found at:", dateutil.__file__) except ImportError: print("sys.path content:", sys.path) traceback.print_exc()重启Apache后,查看Apache的错误日志(通常在Apache安装目录的
logs/error.log),检查输出的sys.path是否包含你的全局Python的site-packages路径(即C:\python\python_3.11.4_64bit\Lib\site-packages)。如果该路径不在列表中,需要在Apache配置的<VirtualHost>块内添加:WSGIPythonPath "C:\python\python_3.11.4_64bit\Lib\site-packages"检查Apache运行账户的文件权限
Windows下Apache默认以Local System或Network Service账户运行,需确保该账户对C:\python\python_3.11.4_64bit\Lib\site-packages目录有读取权限:- 右键该目录,选择「属性」→「安全」标签
- 点击「编辑」,添加Apache运行账户(如
NT AUTHORITY\SYSTEM或NT AUTHORITY\NETWORK SERVICE) - 给该账户分配「读取和执行」「列出文件夹内容」「读取」权限,保存设置
确认mod_wsgi与Python、Apache的兼容性
确保你使用的mod_wsgi版本是针对Python 3.11.4 64位、VS17编译的:- 卸载现有mod_wsgi:
pip uninstall mod_wsgi - 重新安装对应版本:使用
pip install mod_wsgi(会自动匹配当前Python环境),或者从官方渠道下载对应VS17编译的预编译包
- 卸载现有mod_wsgi:
验证全局Python环境的包安装路径
打开命令提示符,执行以下命令:C:\python\python_3.11.4_64bit\python.exe -m pip show python-dateutil查看输出的
Location字段,确认其指向C:\python\python_3.11.4_64bit\Lib\site-packages。如果路径不符,说明包安装到了其他Python环境,需用上述全局Python的pip重新安装:C:\python\python_3.11.4_64bit\python.exe -m pip install --upgrade python-dateutil pandas尝试以管理员身份启动Apache
右键Apache的httpd.exe,选择「以管理员身份运行」,测试是否仍出现模块找不到的错误。Windows下非管理员权限可能导致无法访问某些系统目录下的Python包。
内容的提问来源于stack exchange,提问作者student

