我正在使用运行 Python 3.11 的 MS Windows 11 计算机,并安装了
virtualenv
软件包。
我正在使用
Apache24
httpd.exe
Web 服务器作为我的 django
应用程序生产服务器。
我的应用程序称为
mysite
,它在虚拟环境(称为 venv
)内功能齐全,具有以下软件包(requirements.txt):
django
django-extensions
django-iprestrict
mod-wsgi
Pillow
pyOpenSSL
odfpy
werkzeug
whitenoise
pandas
plotly
matplotlib
我可以在激活虚拟环境的情况下以 DEBUG 模式完全运行服务器:
(venv) python.exe manage.py runserver
另一方面,我能够让
Apache
Web 服务器毫无问题地运行测试网站。
问题是当我编辑
httpd.conf
文件以与我的 django 应用程序集成时 mod_wsgi
:
# httpd.conf
(...)
LoadFile "C:/Users/myuser/AppData/Local/Programs/Python/Python311/python311.dll"
LoadModule "C:/Users/myuser/mysite/mysite_venv/venv/Lib/site-packages/mod_wsgi.cp311-win_amd64.pyd"
WSGIScriptAlias / C:\Users\myuser\mysite\mysite\wsgi.py
WSGIPythonHome C:\Users\myuser\mysite\mysite_venv\venv
WSGIPythonPath C:\Users\myuser\mysite
<Directory />
<Files wsgi.py>
Require all granted
</Files>
</Directory>
# media files hosting
Alias /media "C:/Users/myuser/mysite/media/"
<Directory "C:/Users/myuser/mysite/media/">
Require all granted
</Directory>
(...)
我的目录树是:
.
├── mainapp
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── __init__.py
│ ├── migrations
│ ├── models.py
│ ├── static
│ ├── templates
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── mainapp.sqlite3
├── manage.py
├── media
├── mysite
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── mysite_venv
│ ├── requirements.txt
│ ├── venv
└── staticfiles
├── admin
├── css
├── django_extensions
├── font
├── icon
├── javascript
├── js
└── uploads
问题是当我运行
httpd.exe
时,网页会永远加载,因为服务器不响应客户端。
我已打开
error.txt
中的 Apache
日志文件以了解发生了什么情况,但有任何错误消息。
我关心的是:
PYTHONPATH
环境变量设置为 DLL,如 此处所述mod_wsgi
.pyd
放置在正确的路径中。有人可以帮我看看发生了什么事吗?预先感谢!
模块
plotly
和 mod_wsgi
之间存在一些问题/冲突,当 Apache24 通过 WSGI 加载 plotly
模块时,HTTP/S 请求会被卡住。
同样的事情也发生在
pandas
模块上。
我可以通过评论加载这些模块的所有
views
和 urls
来解决这个问题。
virtualenv
安装这些模块没有问题,问题是mod_wsgi
无法加载它们。
最大的问题是开发服务器通过
python manage.py runserver
与他们一起工作,问题正是当你将服务器置于生产模式时。
我有类似的问题,但使用的是 Flask 框架。我不认为它与 Django 或 Flask 有任何关系,但这是 Windows 本身上的 Python 和 Apache 2.4 的问题。 在 Windows 上安装 Apache2.4.57 后,它会以默认网页启动。完全没有问题。
当我使用 pip install mod-wsgi 将 wsgi 模块安装到 Python 时,一切正常。 wsgi-mod 已正确编译并安装。
当我修改httpd.conf文件时:
加载文件“c:/python311/python311.dll” LoadModule wsgi_module“c:/ python311 / lib / site-packages / mod_wsgi / server / mod_wsgi.cp311-win_amd64.pyd” WSGIPythonHome“c:/python311/”
然后再次启动 httpd.exe,它失败并出现以下错误: httpd.exe:C:/Apache24/conf/httpd.conf 第 192 行存在语法错误:无法将 c:/python311/python311.dll 加载到服务器中:%1 不是 Win32 应用程序。
这是什么意思?我还需要配置什么吗?