ImportError: 无法导入设置 'mysite.settings'(是否在 sys.path 中):没有名为 mysite.settings 的模块

1 投票
1 回答
3638 浏览
提问于 2025-04-18 03:27

我在编辑内容,试图解决第一个答案中的问题。

现在我遇到了403禁止访问的错误。这是我目前的情况:

<VirtualHost ip:80>
    ServerAdmin admin
    ServerName name
WSGIScriptAlias / /home/django/mysite/mysite/wsgi.py

<Directory /home/django/mysite/mysite>
<Files wsgi.py>
     Require all granted
</Files>
</Directory>
</VirtualHost>

我创建了一个用户“django”,它的家目录是/home/django,所有子目录的权限都是“django”。这样设置应该没问题吧?

我正在使用django 1.6.2版本。

/home/django目录下有mysite,而'/home/django/mysite'目录下有manage.py文件。/home/django/mysite/mysite/目录下有init、urls和wsgi.py文件。

wsgi.py文件的内容是:

import os
import sys
sys.path.insert(0,'/home/django/mysite')

os.environ["DJANGO_SETTINGS_MODULE"] =  "mysite.settings"

# NOTICE: the following may only work well in django version 1.5 1.6
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

我哪里做错了?为什么会出现禁止访问的错误? :( wsgi.py文件需要设置成apache用户/组吗?

如果有关系的话,服务器版本是:Apache/2.2.15

这可能和mod_userdir.c有关吗?

1 个回答

3

我通常在 wsgi.py 文件里写这个,使用的是 mod_wsgi

*.conf 文件中进行配置(适用于 Apache 版本 >= 2.4):

<VirtualHost *:80>
        ServerName example.com
        ServerAdmin example@example.com

        Alias /media/ /home/tu/blog/media/
        Alias /static/ /home/tu/blog/collected_static/

        <Directory /home/tu/blog/media>
                Require all granted
        </Directory>

        <Directory /home/tu/blog/collected_static>
                Require all granted
        </Directory>

        WSGIScriptAlias / /home/tu/blog/blog/wsgi.py

        <Directory /home/tu/blog/blog>
        <Files wsgi.py>
                Require all granted
        </Files>
        </Directory>
</VirtualHost>

如果你使用的是 Apache 2.2,请使用

Order allow,deny
Allow from all

而不是

Require all granted

wsgi.py(这取决于你的 Django 版本)

import os
import sys
sys.path.insert(0,'/path/to/project/')

os.environ["DJANGO_SETTINGS_MODULE"] =  "project.settings"

# NOTICE: the following may only work well in django version 1.5 1.6
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

也就是说,把你的 Django 项目当作一个 Python 包来对待,sys.path 用来告诉 Python 这个项目在哪里。

撰写回答