Python Can´;在Apache、WSGI、Django和Windows中加载虚拟环境

Python Can´;在Apache、WSGI、Django和Windows中加载虚拟环境,python,django,windows,apache,wsgi,Python,Django,Windows,Apache,Wsgi,我正在用windows在我的开发计算机上运行Django应用程序。我已经成功地用virtualenv(不是virtualenvwrapper)创建了一个虚拟环境,安装了Django,并用运行python manage.py runserver的内部服务器加载了它。我相信PHP、路径变量等都可以 我还按照的说明成功安装了WSGI,但只是使用了全局Python。我已经安装了mod_wsgi,在virtualenv之外执行以下步骤: set "MOD_WSGI_APACHE_ROOTDIR=

我正在用windows在我的开发计算机上运行Django应用程序。我已经成功地用virtualenv(不是virtualenvwrapper)创建了一个虚拟环境,安装了Django,并用运行
python manage.py runserver
的内部服务器加载了它。我相信PHP、路径变量等都可以

我还按照的说明成功安装了WSGI,但只是使用了全局Python。我已经安装了mod_wsgi,在virtualenv之外执行以下步骤:

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>
它就像一个符咒,表明我在VC版本、Python版本等方面没有问题

当我尝试在虚拟环境中做同样的事情时,Apache似乎无法加载它。我做了所有类似的事情,在我的venv中从头安装了所有东西。唯一不同的是,
modwsgi-express模块配置
产生不同的结果:

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已配置--恢复正常操作
只是立即崩溃
致命的Python错误:Py_初始化:无法加载文件系统编解码器导入错误:没有名为“encodings”的模块

我尝试在cmd窗口中激活venv的情况下启动Apache,但之前未激活它。Apache似乎没有看到或没有激活虚拟环境。问题发生在任何Django干扰之前,我甚至无法提供我显示的测试文件。我甚至尝试在httpd.conf中添加一个
加载文件“C:/wamp64/venv/Scripts/python35.dll”
,但没有成功


我有什么遗漏吗?任何帮助都将不胜感激。

我注意到较新版本的
apache24
mod_wsgi
就是这种情况。一年多前我运行安装程序时不是这样,但在过去的几天里,它再次尝试安装(使用
mod_wsgi 4.7.1
apache2.4.46
)的过程非常辛苦

部分问题似乎在于,由于大多数核心python模块在
venv
目录下不直接可用(因为
virtualenv
设计上没有将这些文件复制到
venv
目录),因此这些新版本无法成功地找到
编码模块(可能还有其他),因为后者不在
venv
下。例如,当您激活虚拟环境并运行时

import encodings
encodings.__file__
在我的例子中,您将获得系统范围的python lib目录
c:/program files/python37/lib/encodings/\uuu init\uu.py

试试看

WSGIPythonHome "c:/program files/python37/"
WSGIPythonPath "/path/to/venv/site-packages;path/to/your/app/root/folder"

这为我解决了问题。它类似于,这有助于我更好地理解我一直怀疑的问题。

在虚拟环境中,
python--version
的输出是什么?感谢您的帮助,isAif。从信息上讲,虚拟环境的python版本是3.5.3,与正在运行的全局版本相同。看起来python版本不是这里的问题。也许我应该尝试调查用户配置文件。我可以尝试以管理员身份再次构建venv(我真的不记得是否已经尝试过)。
WSGIPythonHome "c:/program files/python37/"
WSGIPythonPath "/path/to/venv/site-packages;path/to/your/app/root/folder"