为什么诗歌构建会引发 ModuleOrPackageNotFound 异常?

Why does poetry build raise ModuleOrPackageNotFound exception?

我想用poetry来构建和分发Python源码包,但是在poetry init之后我得到一个错误运行 poetry build.

  ModuleOrPackageNotFound
  No file/folder found for package mdspliter.tree

原因

找不到的原因多半是目录层次不对

发布的包不直接是源码文件夹,里面有很多版本控制、测试、依赖管理等最终包不需要的东西

你应该把这个与包同名的文件夹作为一个包放在那个文件夹中。

解决方案

  1. 更改目录层次结构,以便在 folder.for 示例中存在具有相应名称的包:
D:\GitRepository\python_distribution\temp\tree
├──_init__.py
├──tree.py
├──pyproject.toml
└──README.rst

D:\GitRepository\python_distribution\temp\tree
├──tree
│  ├──__init__.py
│  └──tree.py
├──pyproject.toml
└──README.rst
  1. pyproject.toml
  2. 中指定文件夹
packages = [
    { include = "your_folder_as_pack" }
]

变体

如果项目的名称是mdspliter.tree,那么包含文件夹mdspliter.tree根本没有用,因为这个命名方案不符合规范,如果你使用poetry new mdspliter.tree,你会发现文件夹的名字其实应该是mdspliter_tree.

(在1.2版本中,此行为已更改为生成多层文件夹,mdsplitter/tree

选项 1: 我使用自己的树目录结构创建了我的项目,以使其与其他项目保持一致。所以,我尝试用

创建一个新项目
$ poetry new project-new

在 project-new

中创建了程序包 project-new

现在将您的文件放入新树中。

现在运行

$ poetry build

以上命令将自动创建一个 dist 文件夹 tar 并将 whl 文件放入其中。

选项 2: 如上述答案所述,请将您的包名称包含在 pyproject.toml 文件中。

packages = [
    { include = "package_name" },
]