#34439 closed Bug (invalid)

mod_wsgi for django with conda environment in Windows doesn't work

Reported by: Lorenzo Lo Giudice Owned by: nobody
Component: HTTP handling Version: 3.2
Severity: Normal Keywords: mod_wsgi windows apache conda
Cc: g.chirico@… Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Mariusz Felisiak)

This is my first post in stackoverflow.
I'll try to explain to you what I've done with steps and what I've done to try to solve the problems.

# Problem
I'm struggling with the configuration of mod_wsgi for my django project.

When i try to connect to localhost:8001 (port listened by mod_wsgi) I get an infinite loading or a "This site can’t be reached" page.

# What i've done

I have installed apache2.4 with apachelounge (https://www.apachelounge.com/download/) in my C:
drive.

I have installed anaconda (I haven't set conda in path) and I created my environment for my django project (called *production*).

It runs correctly if I run the command python manage.py runserver
(if i go to http://localhost:7000/ (port set to manage.py) it works.

I installed mod_wsgi in my conda environment with pip install mod-wsgi.

# Files

*httpd.conf* (C:\Apache24\conf\httpd.conf)

ServerName localhost
Listen 8001

...

LoadFile "C:/Users/my_name/anaconda3/envs/production/python39.dll"
LoadModule wsgi_module "C:/Users/my_name/anaconda3/envs/production/lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win_amd64.pyd"
WSGIPythonHome "C:/Users/my_name/anaconda3/envs/production"
WSGIScriptAlias / "C:/Users/my_name/my_path/Analyser/wsgi.py"

<Directory "C:/Users/my_name/my_path/Analyser">
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

LogLevel info
WSGIApplicationGroup %{GLOBAL}

*wsgi.py* (C:/Users/my_name/my_path/Analyser/wsgi.py)

import os
import sys
from django.core.wsgi import get_wsgi_application

# add the project folder to the path (otherwise it says (core: ModuleNotFound)
_BASE_DIR = r'C:\Users\my_name\my_path\Analyser'
if _BASE_DIR not in sys.path:
    sys.path.append(_BASE_DIR)

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

# set CRYPTOGRAPHY_OPENSSL_NO_LEGACY to True otherwise it says OpenSSL...
os.environ.setdefault("CRYPTOGRAPHY_OPENSSL_NO_LEGACY", "1")

print(f'checkpoint 1')
application = get_wsgi_application()
print(f'checkpoint 2')

*settings.py* (C:/Users/my_name/my_path/Analyser/core/settings.py)

WSGI_APPLICATION = 'wsgi.application'

# other stuff
from split_settings.tools import include
include('config/*.py',)

# Issue 1: No module named 'encodings'
This site can't be reached when going to localhost:8001
[Issue1: This site can't be reached](https://i.stack.imgur.com/i0p9r.png)

*error.log*

Python path configuration:
  PYTHONHOME = (not set)
  PYTHONPATH = (not set)
  program name = 'python'
  isolated = 0
  environment = 1
  user site = 1
  import site = 1
  sys._base_executable = 'C:\\Apache24\\bin\\httpd.exe'
  sys.base_prefix = 'C:\\Users\\my_name\\anaconda3\\envs\\production'
  sys.base_exec_prefix = 'C:\\Users\\my_name\\anaconda3\\envs\\production'
  sys.platlibdir = 'lib'
  sys.executable = 'C:\\Apache24\\bin\\httpd.exe'
  sys.prefix = 'C:\\Users\\my_name\\anaconda3\\envs\\production'
  sys.exec_prefix = 'C:\\Users\\my_name\\anaconda3\\envs\\production'
  sys.path = [
    'C:\\Users\\my_name\\anaconda3\\envs\\production\\python39.zip',
    '.\\DLLs',
    '.\\lib',
    'C:\\Apache24\\bin',
  ]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007520 (most recent call first):
<no Python frame>

tried with SetEnv in httpd.conf but it didn't work

# did not work
SetEnv PYTHONHOME "C:/Users/my_name/anaconda3/envs/production"
SetEnv PYTHONPATH "C:/Users/my_name/anaconda3/envs/production/Lib/site-packages"

I added to my environment variables

  • PYTHONHOME >> C:\Users\my_name\anaconda3\envs\production
  • PYTHONHOME >> C:\Users\my_name\anaconda3\envs\production\Lib\site-packages

Now when i go to localhost:8001 i don't get the same error.

# Issue 2: infinite loading
Infinite loading when going to localhost:8001

*error.log*

[Thu Mar 23 14:01:14.062920 2023] [wsgi:info] [pid 31308:tid 1076] mod_wsgi (pid=31308): Create interpreter 'localhost:8001|'.
[Thu Mar 23 14:01:14.065559 2023] [wsgi:info] [pid 31308:tid 1076] mod_wsgi (pid=31308): Adding 'C:/Users/my_name/anaconda3/envs/production/Lib/site-packages' to path.
[Thu Mar 23 14:01:14.068564 2023] [wsgi:info] [pid 31308:tid 1076] mod_wsgi (pid=31308): Adding 'C:/Users/my_name/my_path/Analyser' to path.
[Thu Mar 23 14:01:14.072611 2023] [wsgi:info] [pid 31308:tid 1076] [client ::1:49573] mod_wsgi (pid=31308, process='', application='localhost:8001|'): Loading Python script file 'C:/Users/my_name/my_path/Analyser/wsgi.py'.
[Thu Mar 23 14:01:14.298046 2023] [wsgi:error] [pid 31308:tid 1076] checkpoint 1
[Thu Mar 23 14:01:14.298046 2023] [wsgi:error] [pid 31308:tid 1076] \r

I tried to set WSGIApplicationGroup %{GLOBAL} in httpd.conf, now i get an Internal Server Error page.

# Issue 3: internal server error (continue of Issue 2)

Now the in the *error.log* appears:

raise RuntimeError(\r
[Thu Mar 23 14:09:06.159643 2023] [wsgi:error] [pid 22156:tid 1056] [client ::1:49632] RuntimeError: OpenSSL 3.0's legacy provider failed to load. This is a fatal error by default, but cryptography supports running without legacy algorithms by setting the environment variable CRYPTOGRAPHY_OPENSSL_NO_LEGACY. If you did not expect this error, you have likely made a mistake with your OpenSSL configuration.\r

I tried to set CRYPTOGRAPHY_OPENSSL_NO_LEGACY to True

I tried writing SetEnv CRYPTOGRAPHY_OPENSSL_NO_LEGACY 1 in httpd.conf but it did not work, so
I added os.environ.setdefault("CRYPTOGRAPHY_OPENSSL_NO_LEGACY", "1") in wsgi.py.

# Issue 4: infinite loading (again...)
When i visit localhost:8001 i get an infinite loading.

*error.log*

[Thu Mar 23 14:23:33.150762 2023] [wsgi:info] [pid 3540:tid 1044] [client ::1:49785] mod_wsgi (pid=3540, process='', application=''): Loading Python script file 'C:/Users/my_name/my_path/Analyser/wsgi.py'.
[Thu Mar 23 14:23:33.411332 2023] [wsgi:error] [pid 3540:tid 1044] checkpoint 1
[Thu Mar 23 14:23:33.411332 2023] [wsgi:error] [pid 3540:tid 1044] \r

And now I'm stuck here.

Stackoverflow issue: https://stackoverflow.com/posts/75823890

Change History (1)

comment:1 by Mariusz Felisiak, 20 months ago

Description: modified (diff)
Resolution: invalid
Status: newclosed

Please don't use Trac as a support channel. Closing per TicketClosingReasons/UseSupportChannels.

Note: See TracTickets for help on using tickets.
Back to Top