【发布时间】:2018-10-16 18:37:24
【问题描述】:
我正在尝试让我的 cookiecutter-django 应用在 Apache 下运行,并通过 pip 安装 mod_wsgi。
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 中没有看到任何关于如何进一步跟踪错误的线索。那么这个模块是什么?为什么我需要它?以及如何弄清楚我的问题是什么?
编辑:
这是我的虚拟主机文件(/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:
我删除了配置包。我很确定那是一条红鲱鱼。我在 wsgi.py 中看到了几个对“配置”的引用,例如 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production") 和 app_path = os.path.dirname(os.path.abspath(__file__)).replace('/config', '')。这些事情之一是我的问题所在吗?
我将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'
这里是更多的error.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'
【问题讨论】:
-
你能把你的项目的结构放上来吗?而不是相同的日志。
-
@FrankAK 我添加了更多细节。这有帮助还是我仍然错过了什么?感谢您的帮助。
-
您的项目中似乎没有创建
config文件夹! -
您确定 Apache 甚至开始使用该配置。 WSGIPythonHomen 和 WSGIPythonPath 不应该被允许在 VirtualHost 中。改用 mod_wsgi 的守护程序模式,改用 WSGIDaemonProcess 上的 python-home 和 python-path。请参阅有关使用虚拟环境的 mod_wsgi 文档。
-
@GrahamDumpleton 抱歉,我更正了,但发布了旧版本。
标签: python django cookiecutter-django