在Poetry 的pyproject.tomldependencies配置文件中,您可以同时指定和dev-dependencies,但文档没有明确说明区别是什么。
我从名称猜想开发依赖项不会由发布版本安装,但我没有注意到任何区别。如何正确使用这些字段,例如排除构建中的开发依赖项?
在进行诗歌初始化时,我得到了以下结构:
/packagename
__init__.py
packagename.py
/packagename
/tests
__init__.py
test_packagename.py
pyproject.toml
Run Code Online (Sandbox Code Playgroud)
这对于包来说很好,但我不知道如何使其适合命令行脚本。当我有一个像 script.py 这样的脚本时,其代码结构如下:
在文件 script.py 中:
#!/usr/bin/python3
def main():
print("Ok")
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
它并不打算用作 python 模块,但是,它可能具有用诗歌处理的有趣的依赖项和测试。
在一些示例中,显示了以下诗歌语法:
[tool.poetry.scripts]
cli_script = 'script.py:main'
Run Code Online (Sandbox Code Playgroud)
然后可以使用以下命令调用脚本:
poetry run cli_script
Run Code Online (Sandbox Code Playgroud)
我正在寻找一些关于如何正确组织我的诗歌项目以供此类使用的指南。
例如,我一直在寻找诗歌初始化的选项(例如诗歌初始化--脚本)。但似乎这种用例并未包含在 new/init 诗歌选项中。
我正在尝试在使用本地依赖项的项目中使用诗歌。具体来说,我还有另外两个诗歌项目作为 git 子模块包含在内,我已将它们作为路径依赖项添加到顶级诗歌项目中。
[tool.poetry.dependencies]
python = "^3.8"
pydantic = "^1.9.0"
adp-utils = {path = "../../adp-utils", develop = false}
adp-cfw = {path = "../../adp-cfw", develop = false}
Run Code Online (Sandbox Code Playgroud)
如果我使用develop = false设置我的依赖项,我可以将它们导入我的客户端代码中并且一切正常。但是,由于我在开发应用程序时对库进行了更改,因此对库的任何更改都需要我更改库版本并在顶级项目上运行诗歌更新。
当我尝试设置develop = true时,导入语句在顶级应用程序上失败。这些库仍然已安装,并且检查 venv 上的 site-packages 文件夹表明它们在那里。
我有一个 conda 环境,我想将其转换为诗歌环境。
我尝试过的是将environment.yamlconda环境的翻译成pyproject.toml诗歌可以读取的文件。这里有步骤:
生成yaml文件
conda env export --from-history > environment.yaml
该--from-history标志仅包含我明确要求的包。这是安装 numpy 后文件的样子。
# environment.yaml
name: C:\Users\EDOCIC\Screepts\My_projects\Tests\conda2poetry\condaenv
channels:
- defaults
dependencies:
- numpy
Run Code Online (Sandbox Code Playgroud)
手动创建pyproject.toml文件environment.yaml。我添加了从conda env export. 这是结果:
# pyproject.toml
[tool.poetry]
name = "conda2poetry"
version = "0.1.0"
description = ""
authors = [""]
[tool.poetry.dependencies]
python = "~3.7"
numpy = "^1.21.5"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Run Code Online (Sandbox Code Playgroud)
使用 创建环境poetry init,它将自动读取 toml 文件。
该过程似乎有效,但它是相当手动的并且容易出错。 有没有更好的办法?
最小工作示例:https://gitlab.com/hynek.blaha/debug-docker-poetry/-/tree/master
\n我一直在使用 Poetry 和来自内部 PyPI 注册表的 Python 包构建 Docker 镜像。由于我们的项目位于私有 GitLab 存储库中,并且内部包不是绝密的,因此我们将诗歌凭证直接存储在pyproject.toml.
2022 年 8 月 24 日,我们所有的 Docker 构建在安装内部包时开始失败:
\n\xe2\x80\xa2 Installing til-bigquery (0.3.4)\n\n HTTPError\n\n 401 Client Error: Unauthorized for url: https://gitlab.com/api/v4/projects/38869805/packages/pypi/files/7a4731d831d4b37262481002271e359f96017570e9480ef16c89489e0b41252f/til_bigquery-0.3.4-py3-none-any.whl#sha256=7a4731d831d4b37262481002271e359f96017570e9480ef16c89489e0b41252f\n\n at /usr/local/lib/python3.9/site-packages/requests/models.py:1021 in raise_for_status\n 1017\xe2\x94\x82 f"{self.status_code} Server Error: {reason} for url: {self.url}"\n 1018\xe2\x94\x82 )\n 1019\xe2\x94\x82 \n 1020\xe2\x94\x82 if http_error_msg:\n \xe2\x86\x92 1021\xe2\x94\x82 raise HTTPError(http_error_msg, response=self)\n 1022\xe2\x94\x82 \n 1023\xe2\x94\x82 def close(self):\n 1024\xe2\x94\x82 \n 1025\xe2\x94\x82 called the underlying ``raw`` object must not …Run Code Online (Sandbox Code Playgroud) 我正在为我的 Python 包管理器使用诗歌,但我相信这适用于任何编程实践。
我一直在这样做,但不知道我在做什么,或者我应该怎么做。
当您使用包管理器并安装新包时,通常会.lock更改文件以保持构建的确定性。
通常,我会提交这些更改,例如:
$ git add poetry.lock pyproject.toml
$ git commit -m "Install packages: beautifulsoup4"
Run Code Online (Sandbox Code Playgroud)
即,我每次安装/删除软件包时都会提交一次。我这样做是因为我觉得这是我应该做的,但我有 0 个线索,如果这实际上是处理这个问题的正确方法。
我做得很好吗?或者是否有任何其他特定的约定和规则我应该遵守以使其尽可能接近最佳实践?
已安装poetry库,当我添加到pyproject.toml下一个设置时:
[tool.poetry-dynamic-versioning]
enable = true
vcs = "git"
style = "pep440"
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Traceback (most recent call last):
File "/home/a-kostenko/.poetry/bin/poetry", line 17, in <module>
from poetry.console import main
File "/home/a-kostenko/.local/lib/python3.8/site-packages/poetry_dynamic_versioning/__init__.py", line 409, in alt_import
module = _state.original_import_func(name, globals, locals, fromlist, level)
ModuleNotFoundError: No module named 'poetry.console'
Run Code Online (Sandbox Code Playgroud)
请帮忙,出了什么问题?
使用pip安装时,pip install sqlalchemy一切正常。
使用诗歌安装时出现错误
? backend poetry add sqlalchemy
Using version ^1.4.23 for SQLAlchemy
Updating dependencies
Resolving dependencies... (0.1s)
AttributeError
'EmptyConstraint' object has no attribute 'allows'
at ~/.poetry/lib/poetry/_vendor/py3.8/poetry/core/version/markers.py:291 in validate
287?
288? if self._name not in environment:
289? return True
290?
? 291? return self._constraint.allows(self._parser(environment[self._name]))
292?
293? def without_extras(self): # type: () -> MarkerTypes
294? return self.exclude("extra")
295?
? backend
Run Code Online (Sandbox Code Playgroud) 我正在开发一个 Python 包,我不想pip install .每次更改某些内容时都必须继续运行以重新安装我的包。除非我有文件,否则使用-eor--editable似乎不起作用setup.py,也没有--no-use-pep517。pyproject.toml如果我没记错的话,我有一个替代方案,这是现在的首选。那么,现在最好的方法是什么?
我的包只是一个 CLI 脚本,但它从同一目录中另一个名为utils.py. 开发时,我不能只从终端手动运行脚本,因为这样我会从行中得到“name_of_package不是一个包from name_of_package.utils import function” 。而如果我只有from utils import function,我可以从终端运行脚本,但是当我pip install运行时,它会说“没有名为utils”的模块。
我确实安装poetry并安装了我的依赖项,运行poetryshell,然后尝试使用 运行我的脚本poetry run /path/to/script.py,但我不断收到错误消息,指出我的包不是包。
我有一个托管在Google Cloud Platform ArtifactRegistry中的 Python 库。此外,我有一个使用Poetry 的Python 项目,它依赖于该库。
\n这是我的项目文件pyproject.toml:
[tool.poetry]\nname = "Test"\nversion = "0.0.1"\ndescription = "Test project."\nauthors = [\n "Me <me@mycompany.com>"\n]\n\n[tool.poetry.dependencies]\npython = ">=3.8,<4.0"\nmylib = "0.1.1"\n\n[tool.poetry.dev-dependencies]\n"keyrings.google-artifactregistry-auth" = "^1.1.0"\nkeyring = "^23.9.0"\n\n[build-system]\nrequires = ["poetry-core>=1.1.0"]\nbuild-backend = "poetry.core.masonry.api"\n\n[[tool.poetry.source]]\nname = "my-lib"\nurl = "https://us-east4-python.pkg.dev/my-gcp-project/my-lib/simple/"\nsecondary = true\n\nRun Code Online (Sandbox Code Playgroud)\n为了启用我的私有存储库,我安装了gcloud CLI并使用我的凭据进行了身份验证。因此,当我运行此命令时,我会看到正确的结果,如下所示:
\n$ gcloud auth list\nACTIVE ACCOUNT\n...\n* <my-account>@appspot.gserviceaccount.com\n...\nRun Code Online (Sandbox Code Playgroud)\n此外,我将Python 密钥环与keyrings.google-artifactregistry-auth一起使用,正如您在项目文件中看到的那样。
\n因此,通过此设置,我可以运行poetry install,使用 GCP 的身份验证从我的私有工件注册表下载依赖项。
当我尝试在 Docker 容器中应用相同的原则时,问题就出现了。
\n我创建了一个像这样的 …
python python-keyring gcloud python-poetry google-artifact-registry
python-poetry ×10
python ×7
conda ×1
docker ×1
gcloud ×1
git ×1
pip ×1
pypi ×1
setup.py ×1
setuptools ×1