gpt4 book ai didi

mod-wsgi - 在 Django/mod_wsgi 虚拟环境中配置 WSGIPythonHome 的问题

转载 作者:行者123 更新时间:2023-12-02 19:50:49 27 4
gpt4 key购买 nike

我在 Windows 10 上运行 Python 3.7.1 和 Apache 2.4.38。我设置了一个虚拟环境,其中包含通过“pip”安装的 Django 2.2.5 和 mod_wsgi 4.6.5。在“httpd.conf”中,我按照几条说明将 WSGIPythonHome 设置为指向我的虚拟环境的根目录。但是当我启动 Apache 时它失败了:“没有名为‘encodings’的模块”。 Apache 似乎需要访问系统范围的 Python。

我在“C:\Program Files\Python3.7.1”中获得了系统范围的 Python。虚拟环境位于:“D:\PROJ\PYTHON\VEnv\django”。

这是我添加到“httpd.conf”的内容:

LoadModule wsgi_module "D:/PROJ/PYTHON/VEnv/django/Lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"

WSGIScriptAlias / "D:/PROJ/PYTHON/VEnv/django/Shipkaliev/wsgi.py"

WSGIPythonHome "D:/PROJ/PYTHON/VEnv/django"

WSGIPythonPath "D:/PROJ/PYTHON/VEnv/django/Shipkaliev"

<Directory "D:/PROJ/PYTHON/VEnv/django/Shipkaliev">
<Files wsgi.py>
Require all granted
</Files>
</Directory>

根据:https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html和:https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/modwsgi/这就是需要设置的方式。

因此,使用此配置,Apache 无法找到虚拟环境中不存在的所有 native Python 模块,如“encodings”、“codecs”、“io”等。

当我注释掉“WSGIPythonHome”指令时,Apache 初始化了 Python,但是如果我尝试在“wsgi.py”脚本中导入 Django,它找不到它。

让一切正常运行的方法是,当我将“WSGIPythonHome”更改为指向系统范围的 Python 并将虚拟环境的“站点包”添加到路径时:

WSGIPythonHome "C:/Program Files/Python3.7.1"

WSGIPythonPath "D:/PROJ/PYTHON/VEnv/django/Lib/site-packages;D:/PROJ/PYTHON/VEnv/django/Shipkaliev"

但这不是它的预期工作方式。 “WSGIPythonHome”有什么意义?难道我做错了什么?我的解决方案是否可以接受?

非常感谢!

最佳答案

我找到了!由于“D:/PROJ/PYTHON/VEnv/django”是虚拟环境的根目录,所以在那里找不到Python标准库。标准库位于“C:/Program Files/Python3.7.1/Lib”。这就是为什么:“没有名为‘encodings’的模块”。

“WSGIPythonHome - 用于在初始化时向 Python 指示其库文件的安装位置。...使用此指令时,应为包含平台独立和系统相关 Python 库文件的目录提供前缀。 “- 感谢:https://code.google.com/archive/p/modwsgi/wikis/ConfigurationDirectives.wiki#WSGIPythonHome

这是我最后的 Apache conf:

LoadModule wsgi_module "D:/PROJ/PYTHON/VEnv/django/Lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"

WSGIScriptAlias / "D:/PROJ/PYTHON/VEnv/django/Shipkaliev/wsgi.py"

WSGIPythonHome "D:/PROJ/PYTHON/VEnv/django;C:/Program Files/Python3.7.1"

WSGIPythonPath "D:/PROJ/PYTHON/VEnv/django/Lib/site-packages;D:/PROJ/PYTHON/VEnv/django/Shipkaliev"

<Directory "D:/PROJ/PYTHON/VEnv/django/Shipkaliev">
<Files wsgi.py>
Require all granted
</Files>
</Directory>

在 Django 和 mod_wsgi 文档中都没有明确说明。希望对您有所帮助。

关于mod-wsgi - 在 Django/mod_wsgi 虚拟环境中配置 WSGIPythonHome 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58159194/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com