0
votes

I follow django tutorial and mod_wsgi installation guide to use Apache and mod_wsg on LinuxMint18.1, but I got an error when I run apache2ctl start.

Current thread 0x00007f88c10c7780 (most recent call first):
[Mon Mar 20 21:23:28.781270 2017] [core:notice] [pid 32458:tid 140225331099520] AH00052: child pid 7962 exit signal Aborted (6)
Fatal Python error: Py_Initialize: can't initialize sys

What's wrong with me?

I follow the steps below to install Apache and mod_wsgi:

  1. apt-get install apache2
  2. apt-get install apache2-dev
  3. apt-get install python3.5-dev
  4. wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.15.tar.gz
  5. tar -zxvf mod_wsgi-4.5.15.tar.gz
  6. cd mod_wsgi-4.5.15
  7. ./configure --with-python=/usr/bin/python3.5
  8. make
  9. make install

Output of ls /usr/bin/ -aoh |grep python are:

lrwxrwxrwx  1 root    26 3月  18 09:40 dh_pypy -> ../share/dh-python/dh_pypy
-rwxr-xr-x  1 root  1.1K 12月 10  2015 dh_python2
lrwxrwxrwx  1 root    29 3月  18 09:40 dh_python3 -> ../share/dh-python/dh_python3
lrwxrwxrwx  1 root    23 3月  18 09:40 pdb2.7 -> ../lib/python2.7/pdb.py
lrwxrwxrwx  1 root    23 3月  18 09:40 pdb3.5 -> ../lib/python3.5/pdb.py
lrwxrwxrwx  1 root    31 3月  18 09:40 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx  1 root    26 3月  18 09:40 pybuild -> ../share/dh-python/pybuild
lrwxrwxrwx  1 root    18 3月  20 18:36 python -> /usr/bin/python2.7
lrwxrwxrwx  1 root     9 3月  18 09:40 python2 -> python2.7
-rwxr-xr-x  1 root  3.4M 11月 19 17:35 python2.7
lrwxrwxrwx  1 root     9 3月  18 09:40 python3 -> python3.5
-rwxr-xr-x  1 root  4.3M 11月 18 03:23 python3.5
lrwxrwxrwx  1 root    33 11月 18 03:23 python3.5-config -> x86_64-linux-gnu-python3.5-config
-rwxr-xr-x  1 root  4.3M 11月 18 03:23 python3.5m
lrwxrwxrwx  1 root    34 11月 18 03:23 python3.5m-config -> x86_64-linux-gnu-python3.5m-config
lrwxrwxrwx  1 root    10 3月  18 09:40 python3m -> python3.5m
lrwxrwxrwx  1 root    29 3月  18 09:40 pyversions -> ../share/python/pyversions.py
lrwxrwxrwx  1 root    34 11月 18 03:23 x86_64-linux-gnu-python3.5-config -> x86_64-linux-gnu-python3.5m-config
-rwxr-xr-x  1 root  3.2K 11月 18 03:20 x86_64-linux-gnu-python3.5m-config

/etc/apache2/apache2.conf:

LoadModule wsgi_module  /usr/lib/apache2/modules/mod_wsgi.so

WSGIScriptAlias / /home/jeffrey/桌面/Workspace/django-env/hello_django/hello_django/wsgi.py
WSGIPythonHome /home/jeffrey/桌面/Workspace/django-env
WSGIPythonPath /home/jeffrey/桌面/Workspace/django-env/hello_django

<Directory /home/jeffrey/桌面/Workspace/django-env/hello_django/hello_django>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

Project file structure:

django-env
├── hello_django
│   ├── hello_django
│   │   └── wsgi.py
1
Are you using a virtualenv? What are the appropriate parts of httpd.conf and your wsgi file?Tim S.
This generally indicates that you have built mod_wsgi from source code using a Python installation in a non standard location, but there is a Python version installed system wide with same major/minor version and it is picking up the wrong Python shared library. Detail what Python version you are using and where it was installed.Graham Dumpleton
@GrahamDumpleton I have detailed it in question, can you take a look at it?Jeffery
And what is the mod_wsgi configuration you use in Apache config file? The other reason can be you are trying to set up mod_wsgi to use a Python virtual environment and have given it the wrong details as to the location.Graham Dumpleton
@GrahamDumpletonJeffery

1 Answers

0
votes

I encountered bunch of similar issues and spent quite some time resolving them. At the end, I wrote the following instructions to work on RHEL7. You are probably using Ubuntu so read the recipe below and change accordingly. It might help.

Setup: RHEL 7, Apache 2.4, Python3.5
-------------------------------------------------------------------------
1. mod_wsgi--------------------------------------------------------------
-------------------------------------------------------------------------
See how I used my python3.5 interpreter to install mod_wsgi. 
wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.14.tar.gz
tar -zxvf 4.5.14.tar.gz
cd mod_wsgi-4.5.14
./configure --with-python=/usr/bin/python3.5
make
make install
chmod 755 /usr/lib64/httpd/modules/mod_wsgi.so

-------------------------------------------------------------------------
2. conf file-------------------------------------------------------------
-------------------------------------------------------------------------
My website conf file in /etc/httpd/conf.d dir
portal.conf

LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi.so
<VirtualHost *:80>
  ServerAdmin [email protected]
  ServerName portal
  ServerAlias portal.com
  DocumentRoot /var/www/html/portal/src/

  WSGIDaemonProcess portal python-path=/var/www/html/portal/src:/var/www/html/portal/venv/lib/python3.5/site-packages
  WSGIApplicationGroup portal
  WSGIScriptAlias / /var/www/html/portal/src/portal/wsgi.py process-group=portal

  <Directory /var/www/html/portal/src>
    Require all granted
  </Directory>

  <Directory /var/www/html/portal/src/portal>
    <Files wsgi.py>
      Require all granted
    </Files>
  </Directory>

  Alias /static /var/www/html/portal/src/static
  <Directory /var/www/html/portal/src/static>
    Require all granted
  </Directory>

  Alias /static /var/www/html/portal/src/templates
  <Directory /var/www/html/portal/src/templates>
    Require all granted
  </Directory>

  Alias /static /var/www/html/portal/src/media
  <Directory /var/www/html/portal/src/media>
    Require all granted
  </Directory>

</VirtualHost>
-------------------------------------------------------------------------
Correct permissions on /var/www/html/------------------------------------
-------------------------------------------------------------------------
chgrp -R apache /var/www/html
find /var/www/html -type d -exec chmod g+rx {} +
find /var/www/html -type f -exec chmod g+r {} +

chown -R user1 /var/www/html/
find /var/www/html -type d -exec chmod u+rwx {} +
find /var/www/html -type f -exec chmod u+rw {} +

find /var/www/html -type d -exec chmod g+s {} +