web-dev-qa-db-fra.com

Python3.7 ImportError: Aucun module nommé 'Django'

Il y a quelques jours, j'ai décidé de mettre à jour python de la version 2.7 à 3.7. Voici ma configuration actuelle:

Ubuntu 16.04
Python 3.7.7
Django 3.0.6
Apache/2.4.18

Utilisation de la commande python -m venv --system-site-packages /var/www/path/to/myenv J'ai créé l'environnement viruel, après l'activation de cet environnement j'ai créé un nouveau projet. Le chemin d'accès à l'environnement ressemble à ceci /var/www/path/to/myenv et le chemin d'accès au projet ressemble à ceci /var/www/path/to/myenv/myproject. Configuration de myproject.conf ressemble à ça:

<VirtualHost *:80>
    ServerName myproject.com
    ServerAlias www.myproject.com
    WSGIDaemonProcess myproject processes=2 threads=15 display-name=%{GROUP} python-home=/var/www/path/to/myenv python-path=/var/www/path/to/myenv/myproject
    WSGIProcessGroup candyhand

    WSGIScriptAlias /   /var/www/path/to/myenv/myproject/myproject/wsgi.py

    <Directory /var/www/path/to/myenv/myproject/myproject/>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>

    <Directory /var/www/path/to/myenv/myproject/>
        Require all granted
    </Directory>

    CustomLog /var/www/path/to/myenv/myproject/logs/Apache_access.log combined
    ErrorLog /var/www/path/to/myenv/myproject/logs/Apache_error.log

    Alias /static/ /var/www/path/to/myenv/myproject/static/
    <Directory /var/www/path/to/myenv/myproject/>
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>


    Alias /media/ /var/www/path/to/myenv/myproject/media/
    <Directory /var/www/path/to/myenv/myproject/>
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

Mais j'ai l'erreur 500 du serveur Apache. Voici le journal du serveur Apache:

mod_wsgi (pid=9495): Target WSGI script '/var/www/path/to/myenv/myproject/myproject/wsgi.py' cannot be loaded as Python module.
[Wed May 20 16:25:08.145621 2020] [wsgi:error] [pid 9495]  mod_wsgi (pid=9495): Exception occurred processing WSGI script '/var/www/path/to/myenv/myproject/myproject/wsgi.py'.
[Wed May 20 16:25:08.145788 2020] [wsgi:error] [pid 9495]  Traceback (most recent call last):
[Wed May 20 16:25:08.145864 2020] [wsgi:error] [pid 9495]   File "/var/www/path/to/myenv/myproject/myproject/wsgi.py", line 12, in <module>
[Wed May 20 16:25:08.145885 2020] [wsgi:error] [pid 9495]      from Django.core.wsgi import get_wsgi_application
[Wed May 20 16:25:08.145945 2020] [wsgi:error] [pid 9495]  ImportError: No module named 'Django'

J'ai configuré VirtualHost selon ceci documentation , mais peut-être ai-je fait une erreur quelque part, merci pour vos conseils.

P.S. python manage.py runserver la commande fonctionne bien

9

Le problème est très probablement que python -m venv Ne génère pas de activate_this.py dans votre virtualenv, veuillez consulter la documentation à https://modwsgi.readthedocs.io/en/develop/user -guides/environnements-virtuels.html # daemon-mode-multiple-applications

"Lorsque vous devez activer l'environnement virtuel Python à partir du fichier de script WSGI comme décrit, il est préférable d'utiliser virtualenv ou virtualenvwrapper pour créer l'environnement virtuel Python. En effet, ils fournissez le fichier de script activate_this.py qui effectue tout le travail de configuration de sys.path. Lorsque vous utilisez pyvenv ou python -m venv avec Python 3, aucun script d'activation de ce type n'est fourni. "

[~ # ~] modifier [~ # ~]

Je viens de comprendre que mod_wsgi v4.6.1 semble gérer correctement l'environnement virtuel créé par python -m venv, Mais mod_wsgi doit utiliser exactement la même version python que votre virtualenv (mod_wsgi ne prend pas le python de virtualenv, vérifiez simplement la version python dans votre wsgi.py pour vous assurer que mod_wsgi utilise la bonne). S'il s'agit de la mauvaise version de l'interpréteur, vous devez réinstaller mod_wsgi après avoir mis à jour votre package global python avec le numéro de version correct.

1
Nico M

Veuillez vérifier si vous avez inséré ces lignes dans Apache2.conf:

WSGIPythonPath /usr/local/lib/python3.7/dist-packages
WSGILazyInitialization On
WSGIApplicationGroup %{GLOBAL}

Pouvez-vous s'il vous plaît partager wsgi.py + le début du fichier journal Apache

0
Houda

Ajoutez ci-dessous en dehors de votre VirtualHost: WSGIPythonHome/var/www/path/to/myenv

0
Beck