> On 15 Sep 2020, at 10:17 pm, Daniel Gutiérrez 
> <[email protected]> wrote:
> 
> 
> Hi, I want to host multiple Flask apps through Apache in the same Windows 10 
> server. I want each app to be running on different ports. I figured that each 
> app must have its own Python configuration, otherwise Apache will only run 
> one of the two web apps. I have seen that in Linux you are supposed to use 
> WSGIDaemonProcess command in the VirtualHost file, but this does not work on 
> Windows.
> 
> I tried using
> 
> import sys
> activate_this = 'C:/CRM4_Flask/venv/Scripts/activate_this.py'
> with open(activate_this) as file_:
>       exec(file_.read(), dict(__file__=activate_this))
> 
> #Expand Python classes path with your app’s path
> # The string inputted as the parameter corresponds to the web app's path in C
> sys.path.insert(0, "C:/CRM4_Flask")
> 
> from run import app as application
> 
> in my run.wsgi file for each app. However, I always get the following error:
> 
> Fatal Python error: initfsencoding: unable to load the file system codec
> ModuleNotFoundError: No module named 'encodings'

This error has nothing to do with use of activate_this files and indicates that 
the Python libraries can't find your Python installation for some reason.

Still set WSGIPythonHome, but set it to where the main Python installation is 
located (not the virtual environment).

This should be the value of sys.prefix, or at least I hope so as I can't 
remember what Windows uses for the main Python installation.

> What alternative do I have instead of using WSGIDaemonProcess, given that it 
> does not work on Windows? Im using Apache 2.4, Python 3.7.7, Windows 10 and 
> mod_wsgi 4.7.1
> 
> My VirtualHost configuration for one of the web apps I want to host is:
> 
> 
> <VirtualHost *:80>
> 
>     ServerName localhost:80
>     ServerAlias localhost:80
>     ServerAdmin [email protected]
> 
>     DocumentRoot c:/CRM4_Flask
> 
>     <Directory c:/CRM4_Flask>
>         Require all granted
>     </Directory>
> 
>     WSGIScriptAlias / c:/CRM4_Flask/run.wsgi
>     WSGIApplicationGroup %{GLOBAL}

Provided that both your WSGI applications only use third party modules that 
work fine in sub interpreters, all you need to do is NOT set 
WSGIApplicationGroup.

So long as you don't set it, each WSGI application will run in a separate 
Python sub interpreter of the same process and in the main shouldn't interfere 
with each other, or at least to the extent that sub interpreters separate 
things.

This is because sub interpreters are used by default, where the name of the sub 
interpreter is based on the name of the virtual host, the port, and the mount 
point of the WSGI application. So long as your two virtual hosts are on 
different ports (except for 80/443 which are still treated as one), they should 
be separate.

If you are using Python packages such as numpy then you will have a problem 
though. This is because numpy and thus a lot of the scientific packages for 
Python don't work in sub interpreters. Usually with those you would force the 
use of the main Python interpreter context. This is fine on Linux where have 
multiple apps which all need that to be done, as you can delegate each to 
separate daemon process groups. On Windows though you would be out of luck, as 
only one could be delegated to the main Python interpreter.

The directive which delegates the WGSI application to the main interpreter is:

    WSGIApplicationGroup %{GLOBAL}

which is why I am asking you not to set it, cause right now you are telling 
both to run in the main interpreter, so they will conflict.

Graham


>     <Directory c:/CRM4_Flask>
>         Options +FollowSymLinks
>         Require all granted
>     </Directory>
> 
>     ErrorLog "logs/crm4-error.log" 
>     CustomLog "logs/crm4-access.log" common 
> 
> </VirtualHost>
> 
> In the httpd.conf I added the following lines:
> 
> LoadFile 
> "c:/users/administrator/appdata/local/programs/python/python37/python37.dll"
> LoadModule wsgi_module 
> "c:/crm4_flask/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
> #WSGIPythonHome "c:/crm4_flask/venv"
> 
> I commented WSGIPythonHome because in theory I need Apache to load two 
> versions of Python, not only one.
> 
> Please let me know if I am doing something wrong or if I should try something 
> else.

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/modwsgi/155C1C57-5676-4F11-ACCB-D0D232A00A98%40gmail.com.

Reply via email to