【问题标题】:Structure a python project with 2 different applications用 2 个不同的应用程序构建一个 python 项目
【发布时间】:2023-03-08 19:59:02
【问题描述】:

我打算用 python/GTK 编写一个访客信息亭。该项目将有两个应用程序,一个用于信息亭的前端,一个用于管理链接到 MySQL 数据库的后端。

我希望这两个应用程序都有共同的代码。 我正在考虑像这样构建项目:

project.common - 用于通用代码

project.frontend - 用于前端。

project.backend - 用于后端。

所以:

project/
    common
    frontend
    backend

我将遇到的问题是每个应用程序都有自己的 data_files,我希望将应用程序单独打包。前端将只在 Linux 上运行,后端将在 Windows(cx_freeze) 和 Linux 上运行。

谁能给我一些建议?

【问题讨论】:

标签: python windows linux pygtk


【解决方案1】:

您的PYTHONPATH 中可以有多个目录(即common/projectfrontend/projectbackend/project 目录)具有重叠的层次结构(即每个都有project 顶级包),但默认情况下Python 不会对此感到满意,因为它使用它找到的 first 匹配目录,并且不像许多其他语言(PHP、Java 等)那样搜索所有这些目录,因此您会收到导入错误。

但是,通过将其放在每个 project/ 目录的 __init__.py 中,您实际上是在告诉 Python 继续查找,并且这不是查找此包代码的唯一地方:

import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)

许多 Pythonistas 会因为这种荒谬的异常而回避和嘲笑你,并宣称这种努力是愚蠢的,并可能对你的灵长类祖先提出不愉快的建议。他们会说“命名空间包是一个糟糕的主意”。准备捍卫你的决定。如果没有伴随 cmets 解释它们的作用,你难道不敢将这两行添加到源代码树中!

此页面对其中一些概念进行了很好的解释: 解释:http://www.doughellmann.com/PyMOTW/pkgutil/

如果您遵循这种方法,您可以使用common+frontendcommon+backend 进行分发。

【讨论】:

    猜你喜欢
    • 2010-09-17
    • 2020-03-05
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多