我打算在python / GTK中写一个访客的信息亭。该项目将有两个应用程序,即自助服务终端的前端和连接到MySQL数据库的管理后端。
我希望两个应用程序都有共同的代码。 我正在考虑像这样构建项目:
project.common - 用于公共代码
project.frontend - 用于前端。
project.backend - 用于后端。
所以:
project/
common
frontend
backend
我将遇到的问题是每个应用程序都有自己的data_files,我希望单独打包应用程序。前端将在Linux上运行,后端将在Windows(cx_freeze)和Linux上运行。
有人可以给我任何建议吗?
答案 0 :(得分:2)
您的common/project
中的多个目录(即frontend/project
,backend/project
和PYTHONPATH
目录)可能有重叠的层次结构(即每个目录都有project
个level package),但默认情况下Python不会对此感到满意,因为它使用它找到的第一个匹配目录,并且不会像许多其他语言一样搜索所有这些目录(PHP,Java等)。 ),所以你会得到导入错误。
但是,通过将其放在每个project/
目录的__init__.py
中,您实际上是在告诉Python继续查找,并且这不是唯一可以找到此程序包代码的地方:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
许多Pythonistas会避免和嘲笑你这种荒谬的异常,并宣称这种努力的愚蠢,并可能对你的灵长类动物的祖先提出不愉快的建议。他们会说,“命名空间包是一个糟糕的主意”。准备捍卫你的决定。并且你不要把这两行添加到你的源代码树中,而不附带解释他们所做的事情的评论!
此页面对其中一些概念有一个很好的解释: 说明:http://www.doughellmann.com/PyMOTW/pkgutil/
如果您使用此方法,则可以使用common
+ frontend
进行分发,使用common
+ backend
进行分发。