【发布时间】:2020-10-25 08:41:30
【问题描述】:
我正在尝试在我的开发计算机中使用 Windows 运行 Django 应用程序。我已经成功地使用 virtualenv(不是 virtualenvwrapper)创建了一个虚拟环境,安装了 Django 并使用运行 python manage.py runserver 的内部服务器加载它。我相信 PHP、路径变量等所有东西都可以。
我还按照https://modwsgi.readthedocs.io/en/develop/ 的说明成功安装了WSGI,但只是使用了全局Python。我已经在 virtualenv 之外安装了执行这些步骤的 mod_wsgi:
set "MOD_WSGI_APACHE_ROOTDIR=C:/wamp64/bin/apache/apache2.4.41"
pip install --upgrade setuptools
pip install mod_wsgi
mod_wsgi-express module-config
然后我将结果行复制到我的 httpd.conf:
LoadFile "c:/program files/python35/python35.dll"
LoadModule wsgi_module "c:/program files/python35/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"
WSGIPythonHome "c:/program files/python35"
在 httpd.conf 中创建别名
Alias /test/ "C:/wamp64/apps/wsgi_app/"
<Location /test>
SetHandler wsgi-script
Options +ExecCGI
</Location>
<Directory "C:/wamp64/apps/wsgi_app">
Options Indexes FollowSymLinks
Require local
</Directory>
并成功提供了一个 wsgi 文件:
import sys
def application(environ, start_response):
status = '200 OK'
output = u''
output += u'sys.version = %s\n' % repr(sys.version)
output += u'sys.prefix = %s\n' % repr(sys.prefix)
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output.encode('UTF-8')]
它就像一个魅力,表明我在 VC 版本、Python 版本等方面没有问题。
当我尝试在虚拟环境中做同样的事情时,Apache 似乎无法加载它。我做了所有类似的事情,从头开始在我的 venv 中安装了所有东西。唯一不同的是mod_wsgi-express module-config 产生了不同的结果:
LoadModule wsgi_module "c:/wamp64/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd"
WSGIPythonHome "c:/wamp64/venv"
Apache 服务器启动:Apache/2.4.41 (Win64) mod_fcgid/2.3.10-dev mod_wsgi/4.7.1 Python/3.5 PHP/7.3.12 configured -- resuming normal operations 只是为了立即崩溃 Fatal Python error: Py_Initialize: unable to load the file system codec ImportError: No module named 'encodings'
我尝试使用之前在 cmd 窗口中激活的 venv 来启动 Apache,而之前没有激活它。似乎 Apache 没有看到或没有激活虚拟环境。问题发生在任何 Django 干扰之前,我什至无法提供我展示的那个测试文件。我什至尝试在 httpd.conf 中添加LoadFile "C:/wamp64/venv/Scripts/python35.dll",但无济于事。
我有什么遗漏吗?任何帮助将不胜感激。
【问题讨论】:
-
虚拟环境中
python --version的输出是什么? -
感谢您的帮助,isAif。幸运的是,虚拟环境的 python 版本是 3.5.3,与正在运行的全局版本相同。似乎python版本不是这里的问题。也许我应该尝试调查用户配置文件。我可以尝试以管理员身份再次构建 venv(我真的不记得我是否已经尝试过)。
标签: python django windows apache wsgi