Django sys.path.append用于WSGI下的project *和* app

时间:2010-03-25 13:05:32

标签: django django-wsgi

有人可以给我一个指针,说明为什么我需要将我的项目根路径添加到python路径以及我的WSGI文件中的应用程序本身?

项目基础被称为'djapp',该应用程序被称为'myapp'。

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../djapp')

os.environ['DJANGO_SETTINGS_MODULE'] = 'djapp.settings'

如果我省略了带有“/../djapp/”的行,则日志会告诉我'myapp'无法导入,即使'djapp.settings'是。 (验证'djapp'已导入)

它可以使用./manage.py命令正常运行。项目文件夹中有__init__

为了测试,我使用addsitedir看到了同样的问题:

site.addsitedir('/home/user/web/project/')
site.addsitedir('/home/user/web/project/djapp')

2 个答案:

答案 0 :(得分:4)

由于djapp(django项目文件夹)位于也属于部署的父文件夹中,因此我将djapp文件夹重命名为project。 然后此代码始终正确:

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..' )
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../project')

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

完整的文件夹布局为:

host.example.com\
    etc\
    bin\
    project\
    logs\

你有什么。这样项目总是可以称为项目:)

希望有所帮助。

GrtzG

答案 1 :(得分:3)

据推测,您的项目中的代码正在执行from myapp import foo

两个选项:

  • 将其更改为from djapp.myapp import foo,这不建议使用,因为它会阻止可移植性;
  • 仅在您的WSGI中添加djapp,并将DJANGO_SETTINGS_MODULE设置为'settings'