栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

一般来说,(Python)项目的结构如何?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一般来说,(Python)项目的结构如何?

首先处理最后一个问题,因为就构建python项目而言,这是最重要的。一旦弄清了如何使导入在项目中正常运行,其余的操作就变得更加容易了。

了解事情的关键是,当前运行的脚本的目录会自动添加到 开始

sys.path
。因此,如果将
main.py
脚本(当前正在调用的脚本
SailQt.pyw
放在 程序包 之外
的顶级容器目录中,则可以确保程序包导入始终有效,无论从何处执行脚本。

因此,最小的起始结构可能如下所示:

project/    main.py    package/        __init__.py        app.py        mainwindow.py

现在,由于

main.py
必须 位于 顶层python软件包目录之外,因此它应该仅包含少量代码(足以启动程序)。鉴于以上结构,这仅意味着以下几点:

if __name__ == '__main__':    import sys    from package import app    sys.exit(app.run())

app
模块将包含初始化程序和设置gui所需的大多数实际代码,该代码将像这样导入:

from package.mainwindow import MainWindow

并且该格式的完全合格的import语句可以在包中的任何位置使用。因此,例如,使用以下稍微复杂的结构:

project/    main.py    package/        __init__.py        app.py        mainwindow.py        utils.py        dialogs/ search.py

search
模块可以
utils
像这样从模块导入函数:

 from package.utils import myfunc

关于访问

__version__
字符串的特定问题:对于PyQt程序,您可以将以下内容放在
app
模块顶部:

    QtGui.QApplication.setApplicationName('progname')          QtGui.QApplication.setApplicationVersion('0.1')

然后像下面这样访问名称/版本:

    name = QtGui.qApp.applicationName()    version = QtGui.qApp.applicationVersion()

当前结构的其他问题主要与维护代码文件和资源文件之间的分离有关。

首先:包树应该只包含代码文件(即python模块)。资源文件位于项目目录中(即,包外部)。其次:包含
资源(例如,pyuic或pyrcc)生成的代码的文件可能应该放在单独的子程序包中(这也使版本控制工具很容易将它们排除在外)。这将导致整个项目结构如下:

project/    db/        database.db    designer/        mainwindow.ui    icons/        logo.png    LICENSE    Makefile    resources.qrc    main.py    package/        __init__.py        app.py        mainwindow.py        ui/ __init__.py mainwindow_ui.py resources_rc.py

在这里,

Makefile
(或同等的)负责生成ui /
rc文件,编译python模块,安装/卸载程序等。将需要安装程序在运行时所需的资源(例如数据库文件)。在您的程序知道如何查找的标准位置(例如,
/usr/share/progname/database.db
在Linux上)。在安装时,
Makefile
还需要生成一个可执行的bash脚本(或等效脚本),该脚本知道您的程序在哪里以及如何启动它。也就是说,类似:

#!/bin/shexec 'python' '/usr/share/progname/main.py' "$@"

显然需要将其安装为

/usr/bin/progname
(或其他方式)。

一开始似乎需要处理很多事情,但是当然,找到一个运行良好的项目结构的主要好处是您可以将其重新用于以后的所有项目(并开始开发自己的模板和工具)用于设置和管理这些项目)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号