我有一个项目想要发布为针对两个 Python 版本(3.6 和 3.8)的包。
我的理解是:
pyenv.poetry创建与所选 Python 版本相对应的虚拟环境。pyproject.toml以指定 python 版本、管理依赖项以及使用此配置发布包。我不明白的是:如何为多个 Python 版本发布同一个包?我不可能是唯一一个拥有此用例的人,对吗?
pyproject.toml文件吗?(每个 python 版本和一组相应的依赖项都有一个......)做了更多的挖掘,我发现这个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)
要去尝试一下,看看这是否有效。
我已经poetry使用构建了一个包poetry build构建了一个包。
这是结构:
\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\nRun Code Online (Sandbox Code Playgroud)\n里面main.py我导入了两个模块
\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\nRun Code Online (Sandbox Code Playgroud)\n它在本地使用 python 运行良好,但是当使用poetryand run 构建时会抛出此错误:
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\'\nRun Code Online (Sandbox Code Playgroud)\n还值得一提的是我的pyproject.toml: …
假设我错误地运行了 apoetry update <module>并且我想撤消它:
这是更新命令的输出
\nUpdating 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 ...\nRun Code Online (Sandbox Code Playgroud)\n我目前的做法是在重新运行之前恢复pyproject.toml到poetry.lock之前的状态poetry install
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 ...\nRun Code Online (Sandbox Code Playgroud)\n然而,这意味着我将丢失尚未对这些文件提交的更改(例如其他模块的更新)。
\n有没有办法只使用诗歌命令来做到这一点?
\n我知道我也可以poetry add mymodule="previous-version"将模块恢复到以前的版本,但是不能保证其依赖项也恢复到与以前完全相同的版本。
我正在开发一个具有依赖项的包,需要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我只需要为我的计算机添加此例外,因此它不应该成为文件的一部分pyproject.toml。这里的问题是该包在技术上与我的用户空间冲突;这是因为我安装了特定的不相关程序。开发此软件包的其他人可能不是这些程序的用户,或者可能不关心它们是否损坏。
我有一个 python 包,用于poetry依赖管理和打包。
在我的本地环境中,我正在使用tox多个 python 版本来测试包。
每次有推送或拉取请求时,如何使用 GitHub 操作来测试我的包?
我尝试过的事情:
pip和安装requirements.txt,但我正在使用诗歌)pip诗歌,不推荐使用诗歌,因为它可能会与我的应用程序依赖项发生冲突,请参阅问题)pytest(github操作的)每个矩阵中运行,这个操作似乎违背了tox的目的)我想在 gh-actions 中测试我的 python 代码。
在我的情况下,我实际应该使用什么?
最佳做法是什么?和最优化的工具
我对诗歌的使用很陌生。我的需要只是将我的 Python 库推送到我的个人 Google Artifact 注册表中。\n启动这些命令后:
\npoetry config virtualenvs.create false\npoetry config $repoName $urlOfTheRemoteArtifactRegistry\npoetry config http-basic.$repoName $userName $userPwd\npoetry publish -r $repoName --build\nRun Code Online (Sandbox Code Playgroud)\n我有这个堆栈错误:
\nHTTP 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\nRun Code Online (Sandbox Code Playgroud)\n413 HTTP 错误意味着我的有效负载太大,但实际上当我
\ndu -h d …Run Code Online (Sandbox Code Playgroud) python http-error google-cloud-platform python-poetry google-artifact-registry
我在与 file 相同的工作目录中执行以下命令worker.py:
poetry run worker.py\nRun Code Online (Sandbox Code Playgroud)\n终端:
\npoetry run worker.py\nRun Code Online (Sandbox Code Playgroud)\n显然,我们看到该文件就在那里(右下角)。
\n问题
\n如果我还需要在帖子中添加其他内容,请告诉我
\n昨天我已经命令诗歌添加新的依赖。我仍在等待...
$ poetry add readability
Using version ^0.3.1 for readability
Updating dependencies
Resolving dependencies... (66408.9s)
Run Code Online (Sandbox Code Playgroud)
有什么办法可以解决这个问题或者手动更新锁吗?
我正在将 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) 我有这个.toml文件:
[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"\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n基本上,这是一个使用“typer”的 CLI 应用程序
\n我运行了命令
\npoetry add typer[all]\nRun Code Online (Sandbox Code Playgroud)\n编辑.toml …
python-poetry ×10
python ×7
bash ×1
http-error ×1
pip ×1
pypi ×1
pytest ×1
python-3.x ×1
toml ×1
tox ×1
typer ×1