无法为同一服务器上的多个mod_wsgi应用程序导入熊猫



我喜欢在apache/mod_wsgi服务器上运行同一个wsgi应用程序的多个实例。应用程序由conf-available/conf.enabled中的两个.conf文件配置。第一个应用程序运行良好,第二个(直到现在还没有尝试第三个(失败,并出现以下错误(来自/var/log/apache/error.log(:

  • ImportError:检测到解释器更改-每个进程只能将此模块加载到一个解释器中
  • 在处理上述异常的过程中,发生了另一个异常:
  • ImportError:C扩展:检测到解释器更改-每个进程只能将此模块加载到一个解释器中。未建造。如果您想从源目录导入panda,您可能需要运行"python setup.py build_ext--inplace--force"来首先构建C扩展

My.conf文件看起来是一样的,只是每个文件的My_App1都在变化:

WSGIDaemonProcess My_App1 python-home=/var/wsgi/My_App1/venv
WSGIProcessGroup My_App1
WSGIScriptAlias /MyApp1 /var/wsgi/My_App1/odmf.wsgi
<Directory /var/wsgi/My_App1>
Require all granted
</Directory>

我仍然是apache2/mod_wsgi的初学者,但我理解WSGIProcessGroup指令,即我正在为每个应用程序启动不同的进程。熊猫如何知道在多个实例中运行?我将venv用于虚拟环境。由于在稍后的步骤中,应用程序可能在不同的版本中运行,因此有必要使用某种不同的环境。然而,当我尝试为两个应用程序使用相同的环境时,我会遇到相同的错误。

操作系统:Ubuntu 18.04

Apache/2.4.29 (Ubuntu) OpenSSL/1.1.1c mod_wsgi/4.5.17 Python/3.6 configured

mod_wsgi/django和apache也有类似的问题(只是使用lxml-tree(。

我有多个django应用程序通过apache中的vhosts运行,每个应用程序都在自己的mod_wsgi守护进程中运行(不共享任何内容(。

以下是我解决问题的方法:

wsgi.py(在django应用程序中(,注释行是自动生成的一个

# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'theapp.settings')
os.environ["DJANGO_SETTINGS_MODULE"] = "theapp.settings"

apache conf

WSGIDaemonProcess My_App1 processes=2 threads=15 lang='C.UTF-8' locale='C.UTF-8' display-name=myapp1 python-home=/var/wsgi/My_App1/venv python-path=/path/to/My_App1
WSGIProcessGroup My_App1
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias /MyApp1 /var/wsgi/My_App1/odmf.wsgi process-group=My_App1
<Directory /var/wsgi/My_App1>
Require all granted
</Directory>

最新更新