标签: python-poetry

诗:如何发布针对多个Python版本的项目包?

我有一个项目想要发布为针对两个 Python 版本(3.6 和 3.8)的包。

我的理解是:

  • 如何使用pyenv.
  • 如何poetry创建与所选 Python 版本相对应的虚拟环境。
  • 如何设置pyproject.toml以指定 python 版本、管理依赖项以及使用此配置发布包。

我不明白的是:如何为多个 Python 版本发布同一个包?我不可能是唯一一个拥有此用例的人,对吗?

  • 需要两个pyproject.toml文件吗?(每个 python 版本和一组相应的依赖项都有一个......)
  • 是否有既定的方法可以用 Poetry 来做到这一点,或者是否需要其他工具/工作流程?

编辑

做了更多的挖掘,我发现这个https://python-poetry.org/docs/dependency-specation/#multiple-constraints-dependencies看起来可能是相关的。

这是上面链接中的示例。

[tool.poetry.dependencies]
foo = [
    {version = "<=1.9", python = "^2.7"},
    {version = "^2.0", python = "^3.4"}
]
Run Code Online (Sandbox Code Playgroud)

poetry add我还发现你可以使用这样指定Python版本...

poetry add cleo --python 3.6.10
Run Code Online (Sandbox Code Playgroud)

这会像这样添加依赖项pyproject.toml......

cleo = {version = "^0.8.1", python = "3.6.10"}
Run Code Online (Sandbox Code Playgroud)

要去尝试一下,看看这是否有效。

python-packaging python-poetry

5
推荐指数
1
解决办法
6620
查看次数

用诗歌构建的Python包找不到模块

我已经poetry使用构建了一个包poetry build构建了一个包。

\n

这是结构:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 some_project\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.py\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 options.py\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 helpers.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ...\n\n
Run Code Online (Sandbox Code Playgroud)\n

里面main.py我导入了两个模块

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 some_project\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.py\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 options.py\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 helpers.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ...\n\n
Run Code Online (Sandbox Code Playgroud)\n

它在本地使用 python 运行良好,但是当使用poetryand run 构建时会抛出此错误:

\n
Traceback (most recent call last):\n  File "/usr/local/bin/someproject", line 5, in <module>\n    from some_project.main import main\n  File "/usr/local/lib/python3.9/site-packages/some_project/main.py", line 4, in <module>\n    from options import some_method\nModuleNotFoundError: No module named \'options\'\n
Run Code Online (Sandbox Code Playgroud)\n

还值得一提的是我的pyproject.toml: …

python pip pypi python-packaging python-poetry

5
推荐指数
1
解决办法
5890
查看次数

通过诗歌撤消模块更新

假设我错误地运行了 apoetry update <module>并且我想撤消它:

\n

这是更新命令的输出

\n
Updating dependencies\nResolving dependencies... (11.5s)\n\nWriting lock file\n\nPackage operations: 0 installs, 2 updates, 0 removals\n\n  \xe2\x80\xa2 Updating mymodule (1.20.28 -> 1.20.36)\n  ...\n
Run Code Online (Sandbox Code Playgroud)\n

我目前的做法是在重新运行之前恢复pyproject.tomlpoetry.lock之前的状态poetry install

\n
git restore poetry.lock pyproject.toml\npoetry install\n\nInstalling dependencies from lock file\n\nPackage operations: 0 installs, 2 updates, 0 removals\n\n  \xe2\x80\xa2 Updating mymodule (1.20.36 -> 1.20.28)\n  ...\n
Run Code Online (Sandbox Code Playgroud)\n

然而,这意味着我将丢失尚未对这些文件提交的更改(例如其他模块的更新)。

\n

有没有办法只使用诗歌命令来做到这一点?

\n

我知道我也可以poetry add mymodule="previous-version"将模块恢复到以前的版本,但是不能保证其依赖项也恢复到与以前完全相同的版本。

\n

python python-poetry

5
推荐指数
0
解决办法
2467
查看次数

如何阻止诗歌卸载软件包

我正在开发一个具有依赖项的包,需要colorama<0.4.4. 我用 pip 安装的其他软件需要colorama==0.4.4. 当我运行时,poetry install它会colorama完全删除,这会破坏我使用的软件。

如何防止colorama删除较新版本的软件包?无论该依赖项需要旧 colorama 的原因是什么,它都可以很好地与新 colorama 配合使用,供我使用。我努力了:

  • poetry install --no-dev(没用)
  • pip install colorama==0.4.3(诗仍然说Removing colorama (0.4.4),尽管pip show colorama报道0.4.3
  • 我还没有为这个包尝试专用的 venv,因为它似乎是一个不必要的复杂解决方案

我只需要为我的计算机添加此例外,因此它不应该成为文件的一部分pyproject.toml。这里的问题是该包在技术上与我的用户空间冲突;这是因为我安装了特定的不相关程序。开发此软件包的其他人可能不是这些程序的用户,或者可能不关心它们是否损坏。

dependency-management python-3.x python-poetry

5
推荐指数
1
解决办法
2371
查看次数

如何使用 GItHub Actions 测试我的 python 包?

我有一个 python 包,用于poetry依赖管理和打包。

在我的本地环境中,我正在使用tox多个 python 版本来测试包。

每次有推送或拉取请求时,如何使用 GitHub 操作来测试我的包?

我尝试过的事情:

我想在 gh-actions 中测试我的 python 代码。

在我的情况下,我实际应该使用什么?

最佳做法是什么?和最优化的工具

python pytest tox github-actions python-poetry

5
推荐指数
1
解决办法
1791
查看次数

无法将带有 Poetry 的 Python 工件发布到 Google Artifact Registry,因为“HTTP 错误 413:请求实体太大”

我对诗歌的使用很陌生。我的需要只是将我的 Python 库推送到我的个人 Google Artifact 注册表中。\n启动这些命令后:

\n
poetry config virtualenvs.create false\npoetry config $repoName $urlOfTheRemoteArtifactRegistry\npoetry config http-basic.$repoName $userName $userPwd\npoetry publish -r $repoName --build\n
Run Code Online (Sandbox Code Playgroud)\n

我有这个堆栈错误:

\n
HTTP Error 413: Request Entity Too Large\n\n  at /usr/local/Cellar/poetry/1.1.7/libexec/lib/python3.9/site-packages/poetry/publishing/uploader.py:216 in _upload\n      212\xe2\x94\x82                     self._register(session, url)\n      213\xe2\x94\x82                 except HTTPError as e:\n      214\xe2\x94\x82                     raise UploadError(e)\n      215\xe2\x94\x82 \n    \xe2\x86\x92 216\xe2\x94\x82             raise UploadError(e)\n      217\xe2\x94\x82 \n      218\xe2\x94\x82     def _do_upload(\n      219\xe2\x94\x82         self, session, url, dry_run=False\n      220\xe2\x94\x82     ):  # type: (requests.Session, str, Optional[bool]) -> None\n
Run Code Online (Sandbox Code Playgroud)\n

413 HTTP 错误意味着我的有效负载太大,但实际上当我

\n
du -h d …
Run Code Online (Sandbox Code Playgroud)

python http-error google-cloud-platform python-poetry google-artifact-registry

5
推荐指数
1
解决办法
3685
查看次数

诗跑worker.py | FileNotFound [Errno 2] 没有这样的文件或目录:b'/snap/bin/worker.py'

我在与 file 相同的工作目录中执行以下命令worker.py

\n
poetry run worker.py\n
Run Code Online (Sandbox Code Playgroud)\n

终端:

\n
poetry run worker.py\n
Run Code Online (Sandbox Code Playgroud)\n

显然,我们看到该文件就在那里(右下角)。

\n
\n

问题

\n
    \n
  • 为什么会出现这个问题呢?
  • \n
  • 未来您将如何解决这个问题?
  • \n
\n

如果我还需要在帖子中添加其他内容,请告诉我

\n

python bash python-poetry filenotfounderror

5
推荐指数
1
解决办法
8005
查看次数

Poetry 需要很长时间才能更新依赖关系

昨天我已经命令诗歌添加新的依赖。我仍在等待...

$ poetry add readability
Using version ^0.3.1 for readability

Updating dependencies
Resolving dependencies... (66408.9s)
Run Code Online (Sandbox Code Playgroud)

有什么办法可以解决这个问题或者手动更新锁吗?

python-poetry

5
推荐指数
1
解决办法
1366
查看次数

如何将tool.poetry.source设置为环境变量

我正在将 Poetry 与私有存储库一起使用,并且需要知道是否有办法将以下配置设置为pyproject.toml环境变量。诗歌文档说类似的内容export POETRY_TOOL_POETRY_SOURCE_NAME=repo应该有效,但我没有运气让它发挥作用。

[[tool.poetry.source]]
name = "repo"
url = "https://a.url/simple"
Run Code Online (Sandbox Code Playgroud)

python toml python-poetry

5
推荐指数
0
解决办法
1928
查看次数

诗歌安装不会安装该软件包

我有这个.toml文件:

\n
[tool.poetry]\nname = "ariel-tar-jfrog"\nversion = "0.1.0"\ndescription = ""\nauthors = ["ariel <ariel.tar99@gmail.com>"]\nreadme = "README.md"\n\n[tool.poetry.scripts]\nariel-tar-jfrog = "ariel_tar_jfrog.main:app"\n\n[tool.poetry.dependencies]\npython = "^3.8"\ntyper = {extras = ["all"], version = "^0.4.0"}\n\n[tool.poetry.dev-dependencies]\npytest = "^5.2"\n\n[build-system]\nrequires = ["poetry-core>=1.0.0"]\nbuild-backend = "poetry.core.masonry.api"\n
Run Code Online (Sandbox Code Playgroud)\n

我有这个目录树:

\n
.\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ariel-tar-jfrog\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ariel_tar_jfrog\n    \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 creds.py\n    \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.py\n    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __pycache__\n    \xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 creds.cpython-38.pyc\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 poetry.lock\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_ariel_tar_jfrog.py\n
Run Code Online (Sandbox Code Playgroud)\n

基本上,这是一个使用“typer”的 CLI 应用程序

\n

我运行了命令

\n
poetry add typer[all]\n
Run Code Online (Sandbox Code Playgroud)\n

编辑.toml …

python python-poetry typer

5
推荐指数
1
解决办法
1243
查看次数