ImportError: нет модуля с именем 'config.settings';'config' не является пакетом - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь запустить мое приложение cookiecutter-django под Apache с mod_wsgi, установленным через pip.

python3 manager.py runserver работает.

Но после запуска его в Apache я получил сообщение об ошибке: модуль конфигурации не найден. Так что я pip install config. (Он не установлен в моей системе разработки.)

Это помещает файл config.py в мой /usr/local/pulseenv/lib/python3.5/site-packages.

В этом файле были различные синтаксические ошибки, которые я исправил. Насколько я могу судить, ошибки произошли из-за изменений между python 2.7 и 3.5.

Но теперь я получаю эту ошибку, и я застрял, куда идти:

ImportError: No module named 'config.settings'; 'config' is not a package

Я не вижу никаких подсказок в файле error.log о том, как дополнительно отследить ошибку. Так что же это за модуль? Зачем мне это нужно? А как понять мою проблему?

РЕДАКТИРОВАТЬ:

Вот мой файл vhost (/etc/apache2/sites-available/000-default.conf):

<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        #DocumentRoot /var/www/html
        DocumentRoot /var/www/pulsemanager/pulsemanager


            Alias /static /var/www/pulsemanager/pulsemanager/static
            <Directory /var/www/pulsemanager/pulsemanager/static>
                Require all granted
            </Directory>

            <Directory /var/www/pulsemanager/config>
                <Files wsgi.py>
                    Require all granted
                </Files>
            </Directory>

           WSGIScriptAlias / /var/www/pulsemanager/config/wsgi.py
           WSGIDaemonProcess pulsemanager
           WSGIProcessGroup pulsemanager
           WSGIApplicationGroup %{GLOBAL}

    </VirtualHost>

Мой проект выложен как:

ubuntu@ip-172-31-84-213:/var/www/pulsemanager$ ls
conf              docs         instantdudiobook.ipynb  package.json         pytest.ini  reqs.txt      setup.cfg
config            env.example  LICENSE                 pulsemanager         README.md   reqs.txt.sav  survey2.txt
CONTRIBUTORS.txt  gulpfile.js  manage.py               pulsenotebook.ipynb  README.rst  requirements  utility
ubuntu@ip-172-31-84-213:/var/www/pulsemanager$ cd pulsemanager/
ubuntu@ip-172-31-84-213:/var/www/pulsemanager/pulsemanager$ ls
contrib  locale  lsrc3  static  surveys  templates  users
ubuntu@ip-172-31-84-213:/var/www/pulsemanager/pulsemanager$

и вот мое вирулентное окружение:

ubuntu@ip-172-31-84-213:/usr/local/pulseenv$ ls
bin  include  lib  lib64  pip-selfcheck.json  pyvenv.cfg  share
ubuntu@ip-172-31-84-213:/usr/local/pulseenv$ cd lib
ubuntu@ip-172-31-84-213:/usr/local/pulseenv/lib$ pip3 list
Package                       Version
----------------------------- ----------------------
apturl                        0.5.2
argon2                        0.1.10
argon2-cffi                   18.1.0
arrow                         0.12.1
beautifulsoup4                4.4.1
binaryornot                   0.4.4
blinker                       1.3
Brlapi                        0.6.4
cairocffi                     0.8.0
certifi                       2018.1.18
cffi                          1.11.5
chardet                       3.0.4
checkbox-support              0.22
click                         6.7
config                        0.3.9
cloud-init                    18.2
command-not-found             0.3
configobj                     5.0.6
cookiecutter                  1.6.0
cryptography                  1.2.3
cssselect2                    0.2.1
cycler                        0.10.0
defer                         1.0.6
defusedxml                    0.5.0
Django                        2.0.3
django-admin-tools            0.8.1
django-allauth                0.35.0
django-autoslug               1.9.3
django-crispy-forms           1.7.2
django-debug-toolbar          1.9.1
django-environ                0.4.4
django-extensions             2.0.6
django-language-field         0.0.3
django-model-utils            3.1.1
feedparser                    5.1.3
future                        0.16.0
guacamole                     0.9.2
hibagent                      1.0.1
httplib2                      0.9.1
idna                          2.6
Jinja2                        2.8
jinja2-time                   0.2.0
jsonpatch                     1.10
jsonpointer                   1.9
language-selector             0.1
louis                         2.6.4
lxml                          3.5.0
Mako                          1.0.3
MarkupSafe                    0.23
oauthlib                      1.0.3
onboard                       1.2.0
padme                         1.1.1
pdfrw                         0.4
pexpect                       4.0.1
pip                           10.0.1
plainbox                      0.25
poyo                          0.4.1
prettytable                   0.7.2
ptyprocess                    0.5
pyasn1                        0.1.9
pycparser                     2.18
pycups                        1.9.73
pycurl                        7.43.0
pygobject                     3.20.0
PyJWT                         1.3.0
pyparsing                     2.0.3
Pyphen                        0.9.4
pyserial                      3.0.1
python-apt                    1.1.0b1+ubuntu0.16.4.1
python-dateutil               2.7.0
python-debian                 0.1.27
python-systemd                231
python3-openid                3.1.0
pytz                          2018.3
pyxdg                         0.25
PyYAML                        3.11
reportlab                     3.3.0
requests                      2.18.4
requests-oauthlib             0.8.0
sessioninstaller              0.0.0
setuptools                    39.1.0
six                           1.10.0
sqlparse                      0.2.4
ssh-import-id                 5.5
system-service                0.3
tinycss2                      0.6.1
ubuntu-drivers-common         0.0.0
ufw                           0.35
unattended-upgrades           0.1
unity-scope-calculator        0.1
unity-scope-chromiumbookmarks 0.1
unity-scope-colourlovers      0.1
unity-scope-devhelp           0.1
unity-scope-firefoxbookmarks  0.1
unity-scope-gdrive            0.7
unity-scope-manpages          0.1
unity-scope-openclipart       0.1
unity-scope-texdoc            0.1
unity-scope-tomboy            0.1
unity-scope-virtualbox        0.1
unity-scope-yelp              0.1
unity-scope-zotero            0.1
urllib3                       1.22
usb-creator                   0.3.0
webencodings                  0.5.1
wheel                         0.29.0
whichcraft                    0.4.1
xdiagnose                     3.8.4.1
xkit                          0.0.0
XlsxWriter                    0.7.3

РЕДАКТИРОВАТЬ 2:

У меня есть каталог конфигурации:

ubuntu@ip-172-31-84-213:~$ cd /var/www/pulsemanager/config/
ubuntu@ip-172-31-84-213:/var/www/pulsemanager/config$ ls
__init__.py  __pycache__  settings  urls.py  wsgi.py
ubuntu@ip-172-31-84-213:/var/www/pulsemanager/config$ cd settings
ubuntu@ip-172-31-84-213:/var/www/pulsemanager/config/settings$ ls
base.py  __init__.py  local.py  production.py  __pycache__  test.py
ubuntu@ip-172-31-84-213:/var/www/pulsemanager/config/settings$

А вот и мой wsgi.py. Похоже, что DJANGO_SETTINGS_MODULE должен быть установлен по умолчанию в config.settings.production (/var/pulsemanager/config/settings/production.py):

"""
WSGI config for pulsemanager project.


"""
import os
import sys

from django.core.wsgi import get_wsgi_application

# This allows easy placement of apps within the interior
# pulsemanager directory.
app_path = os.path.dirname(os.path.abspath(__file__)).replace('/config', '')
sys.path.append(os.path.join(app_path, 'pulsemanager'))

if os.environ.get('DJANGO_SETTINGS_MODULE') == 'config.settings.production':
    from raven.contrib.django.raven_compat.middleware.wsgi import Sentry

# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
# if running multiple sites in the same mod_wsgi process. To fix this, use
# mod_wsgi daemon mode with each site in its own daemon process, or use
# os.environ["DJANGO_SETTINGS_MODULE"] = "config.settings.production"
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")

# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
application = get_wsgi_application()
if os.environ.get('DJANGO_SETTINGS_MODULE') == 'config.settings.production':
    application = Sentry(application)
# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)

РЕДАКТИРОВАТЬ 3:

Я удалил пакет конфигурации. Я уверен, что это была красная сельдь. Я вижу несколько ссылок на 'config', например, os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production") и app_path = os.path.dirname(os.path.abspath(__file__)).replace('/config', '') в wsgi.py. Это одна из тех вещей, где моя проблема?

Я добавил export DJANGO_SETTINGS_MODULE=config.settings.production к config/__init__.py и даже попытался поместить os.environ["DJANGO_SETTINGS_MODULE"] = "config.settings.production" в верхнюю часть wsgi.py.

Я обновил WSGIDaemonProcess до:

WSGIDaemonProcess pulsemanager python-home=/usr/local/pulseenv/  python-path=/var/www/pulsemanager/pulsemanager:/usr/local/pulseenv/lib/python3.5/site-packages 

но я все еще получаю:

ImportError: No module named 'config'

Вот больше ошибок.log

    [Tue May 08 16:58:33.360155 2018] [mpm_event:notice] [pid 7420:tid 139690171062144] AH00489: Apache/2.4.18 (Ubuntu) OpenSSL/1.0.2g mod_wsgi/4.6.4 Python/3.5 configured -- resuming normal operations
    [Tue May 08 16:58:33.360248 2018] [core:notice] [pid 7420:tid 139690171062144] AH00094: Command line: '/usr/sbin/apache2'
    [Tue May 08 16:58:33.414142 2018] [wsgi:info] [pid 7423:tid 139690171062144] mod_wsgi (pid=7423): Attach interpreter ''.
    [Tue May 08 16:58:33.437248 2018] [wsgi:info] [pid 7423:tid 139690171062144] mod_wsgi (pid=7423): Adding '/var/www/pulsemanager/pulsemanager' to path.
    [Tue May 08 16:58:33.441845 2018] [wsgi:info] [pid 7423:tid 139690171062144] mod_wsgi (pid=7423): Adding '/usr/local/pulseenv/lib/python3.5/site-packages' to path.
    [Tue May 08 16:58:33.449915 2018] [wsgi:info] [pid 7423:tid 139690171062144] mod_wsgi (pid=7423): Imported 'mod_wsgi'.
    [Tue May 08 16:58:33.454029 2018] [wsgi:info] [pid 7423:tid 139690021156608] [remote 172.31.6.98:39831] mod_wsgi (pid=7423, process='pulsemanager', application=''): Loading Python script file '/var/www/pulsemanager/config/wsgi.py'.
    [Tue May 08 16:58:33.683108 2018] [wsgi:error] [pid 7423:tid 139690021156608] [remote 172.31.6.98:39831] mod_wsgi (pid=7423): Failed to exec Python script file '/var/www/pulsemanager/config/wsgi.py'.
    [Tue May 08 16:58:33.683161 2018] [wsgi:error] [pid 7423:tid 139690021156608] [remote 172.31.6.98:39831] mod_wsgi (pid=7423): Exception occurred processing WSGI script '/var/www/pulsemanager/config/wsgi.py'.
   ...

    [Tue May 08 16:59:13.003234 2018] [wsgi:error] [pid 7423:tid 139689928836864] [remote 172.31.93.15:41324] ImportError: No module named 'config'

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

У меня однажды была проблема, подобная вышеописанной:

$ py -3 bloody.py
Traceback (most recent call last):
  File "bloody.py", line 1, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'

Это произошло, хотя я следовал инструкциям на веб-сайте Cisco Devnet, в которых предлагалось:

pip install requests

То, что я закончил бегом, было:

py -2 -m pip install requests

py -3 -m pip install requests

Это установлено requests для Python 3, а также Python 2.

0 голосов
/ 07 мая 2018

Ваш DJANGO_SETTINGS_MODULE должен указать пакет или модуль, который существует в корневой папке проекта.

[pulsemanager]/
├── [config]/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Использование virtualenv

WSGIPythonPath /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages 

Использование режима демона mod_wsgi

WSGIDaemonProcess pulsemanager python-path=/path/to/pulsemanager:/path/to/venv/lib/pytho\
n2.7/site-packages
WSGIProcessGroup pulsemanager

Для нескольких сайтов, запущенных в одном процессе mod_wsgi, все они будут использовать настройки, какие из них будут запускаться первыми. Это можно решить, изменив:

os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings.{{env}}"

Обновлено wsgi.py

import os
import sys

from django.core.wsgi import get_wsgi_application

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pulsemanager.settings.production")

if os.environ.get("DJANGO_SETTINGS_MODULE") == "pulsemanager.settings.production":
    from raven.contrib.django.raven_compat.middleware.wsgi import Sentry
    application = Sentry(get_wsgi_application())
else:
    get_wsgi_application()
...