编写更多pythonic代码(十)——构建 Python 应用程序

编写更多pythonic代码(十)——构建 Python 应用程序

首页卡牌对战代号放置更新时间:2024-07-31

一、概述

要编写可靠的Python应用程序,熟悉良好的应用程序布局是非常重要的。浏览可靠的Python应用程序布局参考指南可以让我们在大多数用例中找到指导方针。同时,查看常见的Python应用程序结构示例也能提供有价值的参考,其中包括命令行应用程序(CLI应用程序)、一次性脚本、可安装包以及使用Flask和Django等流行框架的Web应用程序布局。

在可靠的Python应用程序布局参考指南中,我们可以学习到一些最佳实践和通用原则,如模块划分、代码组织和文件命名规范等。这个指南可以帮助我们更好地组织代码,使其易于阅读、测试和维护。通过遵循这些指导方针,我们可以编写出结构合理、可扩展的Python应用程序。

另外,查看常见的Python应用程序结构示例也是一个很好的学习方法。对于命令行应用程序(CLI应用程序),我们可以了解如何将主要的执行入口点放在一个独立的文件中,并使用模块来处理不同的功能。这种结构使得我们的代码更具有可读性和可维护性。

一次性脚本的结构也非常重要,我们可以将其组织为函数或类,并根据功能将相关代码放置在不同的文件中。这样做有助于保持代码的模块化和可读性,同时也方便重用和测试。

对于可安装包,我们需要将源代码放在单独的目录中,并使用适当的工具进行包管理。通过这种方式,我们可以方便地分发包,并管理其依赖关系。此外,版本控制系统也能够更好地跟踪我们的代码变动。

对于使用流行框架如Flask和Django的Web应用程序,查看示例可以帮助我们了解推荐的项目结构和目录布局。通过将不同组件(如视图、模型、路由等)放置在相应的目录中,我们可以更好地组织和管理代码。

总的来说,浏览可靠的Python应用程序布局参考指南是一个很好的做法,它为我们提供了在大多数用例中进行代码组织的指导。无论是开发命令行应用程序、一次性脚本、可安装包还是Web应用程序,这个指南都可以让我们受益,并帮助我们编写更具可读性、可维护性和可扩展性的Python代码。

二、可安装的单一软件包

在构建Python应用程序的可安装单个包章节中,您可以按照以下步骤进行编写:

首先,将您的代码组织成一个可安装的包。创建一个名为helloworld的目录,在其中包含以下文件:

- __init__.py:该文件是一个空文件,用于标识helloworld目录为Python包。

- hello.py:包含具体的Hello World功能代码的文件。

- utils.py:包含实用函数或工具代码的文件。

在setup.py文件中定义包的元数据和依赖项。以下是setup.py文件的示例:

from setuptools import setup setup( name='helloworld', version='1.0', author='Your Name', packages=['helloworld'], install_requires=[ 'some_dependency', # 添加您的项目所需的依赖项 ], )

接下来,创建一个README.md文件,用于描述您的包的用途、特性和使用方法。

随后,您可以编写有关如何安装和使用您的包的说明文档,并提供示例代码。

最后,构建和发布您的包:

1. 在命令行中,进入包含setup.py的目录。

2. 运行python setup.py sdist命令,将源代码打包为分发版本。

3. 使用您喜欢的工具(例如Twine)上传您的包到包管理器(如PyPI)。

附上一个示例的目录结构,供您参考:

helloworld/ |-- helloworld/ | |-- __init__.py | |-- hello.py | |-- utils.py |-- README.md |-- setup.py

请注意,以上是一个基本的示例,您可以根据自己的项目需求进行相应的调整和扩展。

总而言之,通过组织您的代码、定义包的元数据、提供说明文档和发布您的包,您就可以创建一个可安装的单个包,以便他人可以轻松地安装、使用和扩展您的Python应用程序。

三、带有内部模块的应用程序

在构建Python应用程序中,您可以选择使用内部包来组织和管理您的应用程序代码。内部包是一种将相关模块组织在一起的方式,有助于提高代码的可维护性和重用性。

以下是构建带有内部包的Python应用程序的一些步骤:

  1. 创建主应用程序目录:首先,创建一个主应用程序目录,用于存放您的应用程序的主要代码文件。命名该目录为您应用程序的名称,例如myapp。
  2. 创建内部包目录:在主应用程序目录下,创建一个或多个内部包目录,用于组织不同模块的相关功能。您可以根据应用程序的逻辑结构或特定功能创建这些内部包目录。给每个内部包目录取一个描述性的名称,例如utils、models、views等。
  3. 编写模块代码:在每个内部包目录中,编写相应的模块代码。一个内部包目录可以包含多个模块文件。根据功能或责任的不同,将相关代码放置在适当的模块文件中。
  4. 导入和使用内部包:在您的应用程序中,可以使用import语句导入和使用内部包中的模块。例如,如果您的应用程序目录结构如下所示:

myapp/ |-- utils/ | |-- math.py | |-- string.py |-- models/ | |-- user.py | |-- post.py |-- views/ | |-- home.py | |-- profile.py |-- main.py

您可以在main.py或其他模块中使用以下导入语句来引用内部包中的模块:

from utils import math from models import user from views import home

通过这样的组织方式,您可以将代码按逻辑分组,并且可以通过简单的导入语句访问和重用所需的功能模块。

请注意,以上只是一个示例,您可以根据自己的应用程序需求进行相应的调整和扩展。构建带有内部包的Python应用程序可以帮助您更好地组织和管理代码,并提高代码的可维护性和复用性。

四、Django web应用程序

当涉及到Python项目的结构时,Django有其独特的要求和规范。它提供了一个名为django-admin的命令,可以轻松地创建项目结构。通过运行"django-admin startproject [项目名称]"命令,您可以在安装Django之后创建一个包含项目信息的文件夹。

项目根目录即为项目名称,其中还包含一个与项目名称相同的文件夹。

第二个文件夹包含配置信息,例如设置和URL映射。Django还提供了一个名为manage.py的命令,以控制应用程序,并包括用于测试Web应用程序的开发服务器。

上述内容尚未涵盖应用程序逻辑。应用程序逻辑存放在称为"apps"的模块中。通过运行"django-admin startapp [应用名称]"命令,您可以创建一个应用程序的骨架,其中包含与该应用程序相关的所有内容。

管理文件用于GUI管理界面,应用程序可帮助您配置应用程序的功能和控制方式,migrations/目录是放置数据库迁移脚本的位置。

如果有适用于应用程序的模型文件,则可以用于ORM。此外,还有一个默认的测试文件可用于测试应用程序。最后,视图用于将内容呈现在Web框架的模型-视图-控制器代码中。除了上述结构外,您还可以添加其他结构。对于较大的应用程序,添加文档可能是一个好主意。

静态/文件夹用于存放静态内容,例如CSS样式表。templates/文件夹用于存放HTML模板,这些模板由视图在应用程序中进行呈现。

除了Django附带的结构外,还有两个文件不被包括在内,但通常我会将它们包含在大多数Django应用程序中——resetdb和runserver是Bash脚本,用于常见任务。

resetdb实际上只是使用runserver调用python manage.py的简写形式,以避免手动输入。一旦它被放置在可执行文件中,您可以通过按下Tab键轻松完成它。

resetdb用于重置数据库。当构建新的Django应用程序时,可能尚未确定数据库的结构,因此重置数据库可以清空所有内容并从头开始。

Django是一个功能强大的应用程序框架,但需要注意的是,与可打包的Django应用程序相比,Django项目的结构有所不同。如果你正在进行Django应用程序的开发,你需要采取一些特定的步骤,这超出了本课的范围。

Django框架本身非常庞大,并包含了许多内容。如果你对Django有兴趣并希望深入学习,可以关注我之后发表的文章。此外,你还可以查阅Django项目文档,以获取更详细的信息。

五、Flask web应用程序

Django与Flask是两个常用的Python Web框架,它们在文件结构和使用方式上存在一些差异。在上一篇课程中,我们已经讨论了Django的文件结构,接下来我们将把它与Flask进行对比,并深入探讨Flask的特点。

首先,相较于Django来说,Flask更加轻量级。它对项目结构的规定不像Django那样严格,这使得我们可以使用更少的代码来构建Web应用程序。当我开始开发大型应用程序时,我通常选择Django;而当我希望快速实现一个概念验证时,我会选择Flask。

但这并不是说Flask不能用于开发大型应用程序,事实上很多人都在使用它。这只是我个人的处理方式。Flask的文件结构相对灵活,本文将介绍Flask官方文档中的示例应用程序Flaskr,你可以在相关网站找到它并自行查看。

就像Django一样,Flask的文件结构包括项目级别的顶部目录,然后是配置目录,其中包含了与应用程序同名的子目录。配置目录中包含有关数据库等信息,而实际的应用程序代码、模板和静态文件在这些子目录内。

虽然与Django存在一些区别,但Flask的文件结构也是组织在子文件夹内。在右侧,你可以看到test/目录、虚拟环境和一些配置文件,如.gitignore、setup和MANIFEST等。

总之,Flask的文件结构既具备了大型应用程序的一些特点,又融合了Django结构的思想。和Django一样,Flask也是一个非常强大的框架。

六、摘要

软件开发是一个富有挑战性和创造性的领域,而在这个领域中,模块和测试代码的组织方式一直备受讨论和争议。不同的程序员对于如何有效地组织这些代码有着各自的偏好和看法。

对于将测试代码放在模块目录中还是项目路径中,人们观点不一。有些人更喜欢将测试代码与模块代码放在同一个目录下,这样可以方便地管理和维护相关的测试用例。而其他人则认为应该将独立的集成测试代码放在项目目录之外,以保持整体结构的清晰性和简洁性。

除了模块和测试代码的组织方式之外,关于虚拟环境的位置也引起了一些争议。虚拟环境的创建和使用方法因个人偏好和所使用的工具而异。一本名为《Real Python Pipenv》的指南提供了关于虚拟环境的详细介绍和使用方法,读者可以根据自己的需要参考该指南获取更多信息。

在选择文件结构时,遵循一些标准的文件结构有其优势。这样可以方便使用其他工具,因为这些工具对于文件结构和 setup.py 文件通常会有一定的期望。例如,tox 可用于针对多个 Python 版本进行程序测试,并对文件结构和 setup.py 文件有特定要求;而 twine 则可用于将包上传到 pypi.org 并分享,它对由 setup.py 创建的发布文件有特定的要求。

除了文件结构之外,代码检查和格式化也是提高开发效率和代码质量的关键步骤。有许多工具可以用来进行代码检查和格式化,如 pyflakes、pylint、pychecker、pep8 和 flake8 等。其中,近来备受瞩目的是 black 工具,它可以自动重新格式化 Python 代码,有效地避免因代码样式而引起的团队内部争议。

此外,还有一些强大的脚手架工具可用于快速启动项目。比较常见的有 pyscaffold 和 cookiecutter 等,它们能够快速生成项目骨架和基础代码,加速开发过程。

综上所述,模块和测试代码的组织方式以及虚拟环境的位置都是软件开发中需要慎重考虑和选择的重要因素。在选择文件结构时,遵循一定的标准可能会带来更多的便利性,并且能够与其他工具更好地协作。代码检查、格式化以及使用脚手架工具也是提高开发效率和代码质量的好办法。

在软件开发中,对于模块和测试代码的组织方式,不同的程序员可能有不同的偏好。有些人更喜欢将测试代码放在模块目录中,而不是项目路径中。这样做可以将单元测试与模块放在一起,将独立的集成测试放在项目目录外。

关于虚拟环境的位置,也存在一些争议。虚拟环境的创建和使用方法因个人偏好和使用的工具而异。《Real Python Pipenv》指南提供了关于虚拟环境的详细介绍和使用方法,感兴趣的读者可以参考该指南获取更多信息。

在选择文件结构时,遵循一些标准的文件结构有其优势。这样可以方便使用其他工具,因为这些工具对文件结构和 setup.py 文件有一定的期望。例如,tox 可用于针对多个 Python 版本进行程序测试,并对文件结构和 setup.py 文件有特定要求;twine 可用于将包上传到 pypi.org 并分享,它对由 setup.py 创建的发布文件有特定要求。

除了文件结构,对于大型程序来说,进行代码检查和格式化也是有帮助的。有许多工具可供选择,如 pyflakes、pylint、pychecker、pep8 和 flake8,它们可以用于代码检查和格式化。

近来,一种名为 black 的工具备受欢迎。Black 可以自动重新格式化 Python 代码,它可以有效避免由于代码样式而引起的团队争议。

此外,还有一些强大的脚手架工具可用于快速启动程序。其中两个常见的工具是 pyscaffold 和 cookiecutter。

总结一下,对于软件开发中模块和测试代码的组织方式以及虚拟环境的位置,各有各的偏好和讨论。在选择文件结构时,遵循一定的标准可能会带来更多便利性,并且使用其他工具时也能符合其期望。进行代码检查、格式化以及使用脚手架工具都是提高开发效率和代码质量的好办法。

希望本文对您有所帮助,谢谢关注!

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved