Python:如何使 Poetry 包含不在子路径上的包/模块?

问题描述 投票:0回答:2

我在一个存储库中有两个 Python 项目,它们都依赖于共享实用程序包。我的目标是将这两个项目分别打包在一个软件分发包中(即一个

.tzr.gz
文件)

我目前正在使用

setuptools
setup.py
文件完成此操作,但遇到了困难。我更愿意使用 Poetry 来分别管理和打包这两个项目。

请考虑我的问题的“最小重现”:

repo
    project1/ 
        __init__.py
        main_module.py
        pyproject.toml
    project2/ 
        __init__.py
        main_module.py
        pyproject.toml
    util/
        __init__.py
        util_module.py

我试图让 Poetry 在构建

util
时包含
project1
包,方法是这样修改它的
project.toml

[tool.poetry]
name = "project1"
version = "0.1.0"
description = ""
authors = [""]
packages = [
    { include = "../util/*.py" }
]

[tool.poetry.dependencies]
python = "^3.9"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

当我运行

poetry build
时,我收到此错误:

Building project1 (0.1.0)
  - Building sdist

  ValueError

  'C:\\repo\\util\\__init__.py' is not in the subpath of 'C:\\repo\\project1' OR one path is relative and the other is absolute.

  at ~\.pyenv\pyenv-win\versions\3.9.6\lib\pathlib.py:929 in relative_to
       925│         n = len(to_abs_parts)
       926│         cf = self._flavour.casefold_parts
       927│         if (root or drv) if n == 0 else cf(abs_parts[:n]) != cf(to_abs_parts):
       928│             formatted = self._format_parsed_parts(to_drv, to_root, to_parts)
    →  929│             raise ValueError("{!r} is not in the subpath of {!r}"
       930│                     " OR one path is relative and the other is absolute."
       931│                              .format(str(self), str(formatted)))
       932│         return self._from_parsed_parts('', root if n == 1 else '',
       933│                                        abs_parts[n:])

poetry
不支持我的用例吗?如果没有,我错过了什么?

或者,请建议另一种方法来分别打包我的两个项目,但两个包都必须包含共享的

util
包。

python python-packaging python-poetry sdist
2个回答
5
投票

这似乎是诗歌的问题。看看这个https://github.com/python-poetry/poetry/issues/5621


0
投票

Util 本身应该构建为另一个 python 包。

© www.soinside.com 2019 - 2024. All rights reserved.