Сервер VirtualEnv apache2 Нет модуля с именем 'django' - PullRequest
0 голосов
/ 30 декабря 2018

Я запускаю виртуальную среду для моего сервера apache2 изнутри /home/myname/myproject/venv

Я активирую свою виртуальную среду с помощью

source venv/bin/activate

Запуск

which django-admin

Возвратыправильный файл из моей виртуальной среды.

Запуск

 import django
 django.__file__

Возвращает

/home/myname/myproject/venv/lib/python3.6/site-packages/django/__init__.py

Запуск

pip freeze

Возвращает все необходимоепакеты.

У меня также есть мой конфигурационный файл apache2, указывающий на каталог venv с аргументом python-path

Однако после перезапуска сервера я все еще получаю ModuleNotFoundError для django.

В чем здесь проблема?

РЕДАКТИРОВАТЬ: файл конфигурации apache2

    Alias /static /home/myname/myproject/static
    <Directory /home/myname/myproject/static>
        Require all granted
    </Directory>

    Alias /media /home/myname/myproject/media
        <Directory /home/myname/myproject/media>
                Require all granted
        </Directory>

    <Directory /home/myname/myproject/myproj>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIScriptAlias / /home/myname/myproject/myproj/wsgi.py
    WSGIDaemonProcess myproject_app python-path=/home/myname/myproject python-home=/home/myname/myproject/venv/
    WSGIProcessGroup myproject_app
    WSGIApplicationGroup %{GLOBAL}

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

#os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproj.settings')

application = get_wsgi_application()

1 Ответ

0 голосов
/ 30 декабря 2018

Вам необходимо добавить активацию виртуальной среды в файл wsgi.py.

import os
import sys

PROJECT_DIR = '/home/myname/myproject'
sys.path.insert(0, PROJECT_DIR)


def execfile(filename):
    globals = dict( __file__ = filename )
    exec( open(filename).read(), globals )

activate_this = os.path.join( PROJECT_DIR, 'venv/bin', 'activate_this.py' )
execfile( activate_this )

Этот код должен быть перед django импортом.В противном случае при каждом перезапуске Apache2 вам потребуется вручную активировать виртуальную среду.

ПРИМЕЧАНИЕ: убедитесь, что в виртуальной среде установлены все требования.

...