我正在研究包含单个应用程序的Django项目。该应用程序将在GPL下发布,因此我希望将其与该项目分开开发 - 使用该应用程序的个人网站。我试图在项目和应用程序中使用基于我的域名的包结构,这就是我遇到问题的地方。在共享一部分包结构的不同目录中创建多个Python模块
这是我的文件结构(与__init__.py文件在适当情况下):
$HOME/django-sites/mydomain
$HOME/django-apps/mydomain/cms
我的PYTHONPATH:
$HOME/django-sites:$HOME/django-apps
如果我火了Python解释器(从文件系统上的任何目录)我可以从网站导入类,但不能导入应用程序。如果我颠倒PYTHONPATH中的两个条目(应用程序第一,然后站点)的顺序,我可以从应用程序导入,但不能从站点导入。
它看起来像Python只尝试从PYTHONPATH中的第一个条目导入,该条目包含软件包名称的第一部分。那是对的吗?这是预期的行为?如果是这样,我只能将模块粘贴到像domain/app1,domain/app2这样的包结构中(如果它们处于相同的目录结构中) - 不管PYTHONPATH。
这不是显示限制器,因为我可以重命名该站点,但它与我所期望的大不相同。 Python教程提到__path__,但我不知道如何使用它:
包支持一个更多的特殊属性__path__。在执行该文件中的代码之前,它被初始化为一个包含包含__init__.py的目录名称的列表。这个变量可以修改;这样做会影响将来对包中包含的模块和子包的搜索。
虽然此功能通常不是必需的,但它可用于扩展包中找到的一组模块。
有没有人遇到过这个?有没有什么我可以用__path__来完成这个功能?
无论如何,这是正确的 - 第三方应用程序应该位于python导入命名空间的顶部(即'from cms import models')。 所有项目特定的应用程序应该位于您的项目模型中(例如'from [project] .apps。[appname] import models') – SmileyChris 2009-08-06 01:54:46
因此,如果我要开发多个可再分发的第三方应用程序,独特的封装结构? – 2009-08-06 12:11:03