全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Poetry new 命令:测试文件与__init__.py的最新行为解析

poetry 的 `new` 命令行为在2025年4月发生了重要变更。此后,它不再默认生成 `test_*.py` 测试文件,并且 `__init__.py` 文件也会被创建为空。这一变化旨在简化项目初始化流程并与现代python打包实践对齐。因此,用户在遵循旧教程时应注意此差异,并始终查阅poetry的最新官方文档以获取准确信息,测试文件需手动创建。

Poetry new 命令的行为演变

在Poetry早期版本中,当用户执行 poetry new 命令来创建一个新项目时,Poetry会自动生成一个包含基本项目结构、一个空的 __init__.py 文件以及一个预设的 test_.py 测试文件的目录。这种行为对于初学者来说可能很方便,但随着Python生态系统的发展和最佳实践的演变,这种默认行为被重新评估。

2025年4月,Poetry的核心开发团队通过一次重要的提交(commit 85f922dfddb8d8e61408b5d8e53f3bffb6beb2b2b)修改了 poetry new 命令的默认行为。主要变更点如下:

  1. 不再自动生成测试文件:poetry new 命令不再默认创建 test_.py 文件。这意味着新创建的项目将不会在 tests/ 目录下包含任何测试骨架文件。
  2. __init__.py 文件默认为空:项目模块中的 __init__.py 文件(例如 my_project/__init__.py)现在默认创建为空,而不是包含版本信息或其他样板代码。这与Python 3.3+ 以来包的隐式命名空间包(Implicit Namespace Packages)和更简洁的包定义趋势保持一致。

这些变化旨在提供一个更精简、更符合现代Python项目结构的起始点,让开发者可以根据自己的需求和偏好来配置测试和包结构。

当前工作流与最佳实践

鉴于 poetry new 命令行为的改变,开发者在初始化项目时需要调整其工作流。

1. 项目初始化

使用 poetry new 命令创建项目,其输出将只包含最基本的项目骨架:

poetry new my-project

执行上述命令后,my-project 目录结构大致如下:

my-project/
├── pyproject.toml
├── README.md
├── my_project/
│   └── __init__.py
└── tests/

请注意,tests/ 目录下不会有任何 test_*.py 文件,且 my_project/__init__.py 文件是空的。

2. 手动创建测试文件

由于不再自动生成测试文件,开发者需要手动创建并组织测试。推荐使用流行的测试框架,如 pytest。

首先,将 pytest 添加为开发依赖:

cd my-project
poetry add pytest --group dev

然后,在 tests/ 目录下手动创建测试文件,例如 tests/test_example.py:

# tests/test_example.py

from my_project import __version__

def test_version():
    assert __version__ == "0.1.0" # 假设pyproject.toml中定义了版本

为了使上述测试通过,你可能需要在 my_project/__init__.py 中定义 __version__:

# my_project/__init__.py

__version__ = "0.1.0"

最后,运行测试:

poetry run pytest

3. __init__.py 的作用

现在 __init__.py 默认为空,这符合Python 3.3+ 版本的包定义规范。在许多情况下,一个空的 __init__.py 足以将目录标记为一个Python包。如果你需要公开包的版本信息、进行包级别的初始化操作或暴露特定的模块/函数,你可以在 __init__.py 中添加相应代码。

例如,为了从包外部导入版本信息,你可以在 my_project/__init__.py 中定义:

# my_project/__init__.py

__version__ = "0.1.0"

# 你也可以在这里导入包内的其他模块,例如:
# from .module_a import some_function

4. 查阅最新文档

由于Python工具链和最佳实践的快速发展,教程和工具行为可能会随时间而变化。因此,强烈建议在学习和使用Poetry时,始终查阅其官方文档的最新版本。官方文档是获取最准确、最权威信息的来源。

  • Poetry 官方文档:https://www./link/a5220ac660ce8c78e452e5edc69d33cf
  • poetry new 命令文档:https://www./link/a5220ac660ce8c78e452e5edc69d33cfcli/#new

总结与建议

Poetry new 命令的行为变更反映了Python社区对项目初始化和包管理实践的演进。虽然这可能导致一些旧教程与当前Poetry版本不符,但理解这些变化有助于开发者更好地利用Poetry构建和管理项目。

核心要点包括:

  • 测试文件需手动创建:不再依赖Poetry自动生成测试骨架。
  • __init__.py 默认为空:根据需要自行填充,以定义版本或进行包初始化。
  • 始终参考最新官方文档:这是避免混淆和获取最新最佳实践的关键。

通过适应这些变化,开发者可以更灵活、高效地使用Poetry管理Python项目。


# python  # 工具  # python包 


相关文章: 如何确保FTP站点访问权限与数据传输安全?  专业公司网站制作公司,用什么语言做企业网站比较好?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  建站org新手必看:2024最新搭建流程与模板选择技巧  图册素材网站设计制作软件,图册的导出方式有几种?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  建站之星安装提示数据库无法连接如何解决?  广东企业建站网站优化与SEO营销核心策略指南  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  如何打造高效商业网站?建站目的决定转化率  如何规划企业建站流程的关键步骤?  Swift中swift中的switch 语句  做企业网站制作流程,企业网站制作基本流程有哪些?  制作表格网站有哪些,线上表格怎么弄?  孙琪峥织梦建站教程如何优化数据库安全?  XML的“混合内容”是什么 怎么用DTD或XSD定义  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  如何通过商城免费建站系统源码自定义网站主题?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  上海网站制作开发公司,上海买房比较好的网站有哪些?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  如何通过.red域名打造高辨识度品牌网站?  如何选择建站程序?包含哪些必备功能与类型?  Python lxml的etree和ElementTree有什么区别  建站之星Pro快速搭建教程:模板选择与功能配置指南  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  网站微信制作软件,如何制作微信链接?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  在线制作视频的网站有哪些,电脑如何制作视频短片?  C#怎么创建控制台应用 C# Console App项目创建方法  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  建站之星后台管理系统如何操作?  ,如何利用word制作宣传手册?  中山网站制作网页,中山新生登记系统登记流程?  建站VPS推荐:2025年高性能服务器配置指南  建站之星如何通过成品分离优化网站效率?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  韩国服务器如何优化跨境访问实现高效连接?  建站之星2.7模板快速切换与批量管理功能操作指南  小程序网站制作需要准备什么资料,如何制作小程序?  建站之星×万网:智能建站系统+自助建站平台一键生成  网站图片在线制作软件,怎么在图片上做链接?  公众号网站制作网页,微信公众号怎么制作?  IOS倒计时设置UIButton标题title的抖动问题  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四) 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。