0

精简版:

我怎样才能poetry install得到一个依赖项之一是本地 tarball/zip 文件的包?它似乎不起作用,但它显示在poetry 文档中?

当从 gitlab 中提取依赖项时,我可以poetry install打包,但是当我从 gitlab 手动下载依赖项作为 tarball 并尝试poetry install使用 tarball 中的依赖项时,安装失败。



长版:

我正在尝试使用poetry安装我开发的两个软件包:

  • 一个名为的基础包my_package
  • 一个名为extension_of_my_package.

这两个包都在 gitlab 的私有仓库中,并且都有一个pyproject.toml包含它们的依赖项列表。当从 gitlab 下载基础包时,我可以成功poetry install扩展包( )。文件中有一个部分给出了 gitlab 上的私有repo 的位置。extension_of_my_packagemy_packagepyproject.tomlextension_of_my_packagetool.poetry.sourcemy_package

但是,外部用户无法访问我的私人仓库,因此我需要确保可以从 tarball 安装软件包(我从 gitlab 下载并提供给客户端)。

要安装extension_of_my_package我这样做:

tar xzf extension_of_my_package.tgz
cd extension_of_my_package/python

然后编辑pyproject.toml,将依赖项更改my_package为指向本地压缩包:

my_package = { path = "/path/to/my_package.tgz"}

然后运行poetry install。这失败并显示错误消息:

> poetry install
Updating dependencies
Resolving dependencies... (9.3s)

  TypeError

  expected string or bytes-like object

  at /home/user/.poetry/lib/poetry/_vendor/py3.8/poetry/core/utils/helpers.py:27 in canonicalize_name
       23│ _canonicalize_regex = re.compile(r"[-_]+")
       24│ 
       25│ 
       26│ def canonicalize_name(name):  # type: (str) -> str
    →  27│     return _canonicalize_regex.sub("-", name).lower()
       28│ 
       29│ 
       30│ def module_name(name):  # type: (str) -> str
       31│     return canonicalize_name(name).replace(".", "_").replace("-", "_")

根据poetry 文档,可以从本地文件安装:

[tool.poetry.dependencies]
# directory
my-package = { path = "../my-package/", develop = false }

# file
my-package = { path = "../my-package/dist/my-package-0.1.0.tar.gz" }

我也尝试过使用my-package = { file = ...而不是my-package = { path = ...,但它也不起作用。

我尝试添加一个最小的setup.py文件my_package(见这篇文章),但这没有帮助。

我尝试将my_package(以 tarball 格式)转换为wheel. 我可以在poetry install格式中成功,但没有安装依赖项。我看不到如何在轮子中包含依赖信息。当我创建轮子时,我尝试以两种方式指定依赖信息:my packagewheelmy_packages

  1. setup.cfg
[metadata]
name = my_package
version = 0.1.0
description = My Package
license = Proprietary

[options]
packages = find:
install_requires =
   matplotlib >=3.2.0

  1. setup.py
from setuptools import setup

setup(
   name=`my_package`,
   version="0.1.0,
   packages=['.my_package'],
   install_requires=['matplotlib >= 3.2.0',]
)

为了排除我自己的包的任何问题,我创建了一个最小测试并尝试从其 zip 文件(从 gi​​thub 下载)中poetry install获取一个公开可用的包(tqdm)。它也失败了。这个pyproject.toml最小测试是:

[tool.poetry]
name = "tester"
version = "0.0.1"
description = "test package"
authors = [ "me" ]
packages = [
    { include = "tester" }
]

[tool.poetry.dependencies]
python = ">=3.7,<3.9"
tqdm = {file = "/home/user/tqdm-master.zip"}

错误信息是:

> poetry install
Updating dependencies
Resolving dependencies... (13.0s)

  RuntimeError

  Unable to determine package info from path: /home/user/tqdm-master.zip

  at /home/user/.poetry/lib/poetry/puzzle/provider.py:251 in get_package_from_file
      247│             package = PackageInfo.from_path(path=file_path).to_package(
      248│                 root_dir=file_path
      249│             )
      250│         except PackageInfoError:
    → 251│             raise RuntimeError(
      252│                 "Unable to determine package info from path: {}".format(file_path)
      253│             )
      254│ 
      255│         return package

我使用的是poetry1.1.13 版。

我对任何替代方法持开放态度,只要检查所有依赖项即可。

4

0 回答 0