Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to set WSGI of appache2 to work with python 3.7?

I am using ubuntu 16.04 and installed python 3.7 and set it to default using this instructions: Unable to set default python version to python3 in ubuntu when I type python in the console I get python3.7 , i tried to set appache2 to work with python 3.7 using :

sudo add-apt-repository --yes ppa:deadsnakes/ppa
sudo apt-get update --yes
sudo apt-get install --yes python3.7
sudo apt-get install --yes python3-pip
sudo apt-get --yes install python3-pip apache2 libapache2-mod-wsgi-py3 
sudo a2enmod wsgi
sudo apt install --yes python-django-common
sudo apt-get  install --yes python-django

but still I get exceptions of import packages that are already installed in /var/log/apache2/error.log when try to reach out to the server that I don't get at the terminal like this :

Traceback (most recent call last):
 File "/home/ubuntu/my_code/wsgi.py", line 11, in <module>
     from django.core.wsgi import get_wsgi_application
 ImportError: No module named 'django'
 mod_wsgi (pid=75005): Target WSGI script '/home/ubuntu/my_code/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=75005): Exception occurred processing WSGI script '/home/ubuntu/my_code/wsgi.py'.
 Traceback (most recent call last):
  File "/home/ubuntu/my_code/wsgi.py", line 11, in <module>
  from django.core.wsgi import get_wsgi_application

and

mod_wsgi (pid=75005): Target WSGI script '/home/ubuntu/my_code/wsgi.py' cannot be loaded as Python module.

even though i have django installed in python 3.7 another error i get is after service restart :

 mod_wsgi (pid=89300): Call to 'site.addsitedir()' failed for '(null)', stopping.

my wsgiy.py :

import os
import sys

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "servicesite.settings")
path='/home/ubuntu/my_code/'

if path not in sys.path:
  sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'my_code.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

What can be the reason for this error?

like image 716
Omer Anisfeld Avatar asked Jan 26 '21 15:01

Omer Anisfeld


2 Answers

you need to built python and then built wsgi since the default wsgi is built based on the is system python use this tutorial https://medium.com/@garethbjohnson/serve-python-3-7-with-mod-wsgi-on-ubuntu-16-d9c7ab79e03a

like image 158
hard_worker Avatar answered Nov 11 '22 21:11

hard_worker


make custom builds of Python and mod_wsgi ourselves.

apt install apache2 apache2-dev
wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.7.1.tar.gz
tar xvfz 4.7.1.tar.gz
cd mod_wsgi-4.7.1

./configure --with-python=[your python path]
## For example: ./configure --with-python=/usr/bin/python3.7

sudo make
sudo make install

## Finally:
sudo systemctl reload apache2

You can use which python3.7 to find the path of the Python file.

like image 1
Mohammad Nazari Avatar answered Nov 11 '22 23:11

Mohammad Nazari