我试图让我的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中看到有关如何进一步跟踪错误的任何线索。那么这个模块是什么?我为什么需要它?如何弄清楚我的问题是什么?
编辑:
这是我的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:
我删除了配置包。我很确定这是一只红鲱鱼。我在wsgi.py中看到了几个对&quot; config&#39;的引用,例如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'
答案 0 :(得分:1)
您的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()
答案 1 :(得分:0)
我曾经遇到过类似的问题:
$ 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
此版本为Python 3和Python 2安装了requests
。
答案 2 :(得分:0)
从没有 init 文件的本地文件夹导入时,我遇到了同样的问题,因为这会使其成为循环导入。
尝试echo $PYTHONPATH
,将此变量重置为空白对我有用。