标签: python-poetry

修改Poetry的虚拟环境PYTHONPATH

我正在使用 Poetry 来管理依赖项 - 不是作为打包工具。\n给出以下布局

\n
.\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 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my_module.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 scripts\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my_script.py\n
Run Code Online (Sandbox Code Playgroud)\n

在里面my_script.py我正在使用from src.my_module import MyClass,但是当我打电话时poetry run python scripts/my_script.py我得到:

\n
\n

ModuleNotFoundError:没有名为“src”的模块

\n
\n

我想将根目录添加到PYTHONPATH这个特定环境的目录中,但我想避免每次都手动导出它。

\n

底线我正在寻找诗歌与vitualenvwrappers add2virtualenv的等效项

\n

这在诗歌下可能吗?

\n

python python-poetry

10
推荐指数
1
解决办法
1万
查看次数

构建过程中使用的诗歌脚本应该如何存储在项目中?

假设您正在使用 Poetry 来管理 Python PyPI 包。目前,您的项目有一个Makefile包含管理项目安装、单元测试和 linting 的过程。然而,由于这违背了 Poetry 的精神,即理想情况下您有一个配置文件来统治所有这些 ( pyproject.toml),并且因为 saidMakefile在 Windows 构建上可能很烦人,所以您希望Makefile通过以下方式直接将功能移至由 Poetry 管理:利用Poetry 对setuptools脚本的支持。

\n

这是这样一个示例Makefile

\n
PYMODULE := awesome_sauce\nTESTS := tests\nINSTALL_STAMP := .install.stamp\nPOETRY := $(shell command -v poetry 2> /dev/null)\nMYPY := $(shell command -v mypy 2> /dev/null)\n\n.DEFAULT_GOAL := help\n\n.PHONY: all\nall: install lint test\n\n.PHONY: help\nhelp:\n    @echo "Please use \'make <target>\', where <target> is one of"\n    @echo ""\n    @echo "  install     install packages and …
Run Code Online (Sandbox Code Playgroud)

python directory-structure package build-script python-poetry

10
推荐指数
1
解决办法
6746
查看次数

在不使用 setup.py 的情况下开发 Python 包的首选方法是什么?

我正在开发一个 Python 包,我不想pip install .每次更改某些内容时都必须继续运行以重新安装我的包。除非我有文件,否则使用-eor--editable似乎不起作用setup.py,也没有--no-use-pep517pyproject.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,但我不断收到错误消息,指出我的包不是包。

pip setuptools setup.py python-packaging python-poetry

10
推荐指数
1
解决办法
5472
查看次数

Docker 内部具有私有依赖项的工作 Poetry 项目

我有一个托管在Google Cloud Platform ArtifactRegistry中的 Python 库。此外,我有一个使用Poetry 的Python 项目,它依赖于该库。

\n

这是我的项目文件pyproject.toml

\n
[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\n
Run Code Online (Sandbox Code Playgroud)\n

为了启用我的私有存储库,我安装了gcloud CLI并使用我的凭据进行了身份验证。因此,当我运行此命令时,我会看到正确的结果,如下所示:

\n
$ gcloud auth list\nACTIVE  ACCOUNT\n...\n*       <my-account>@appspot.gserviceaccount.com\n...\n
Run Code Online (Sandbox Code Playgroud)\n

此外,我将Python 密钥环与keyrings.google-artifactregistry-auth一起使用,正如您在项目文件中看到的那样。

\n

因此,通过此设置,我可以运行poetry install,使用 GCP 的身份验证从我的私有工件注册表下载依赖项。

\n
\n

当我尝试在 Docker 容器中应用相同的原则时,问题就出现了。

\n

我创建了一个像这样的 …

python python-keyring gcloud python-poetry google-artifact-registry

10
推荐指数
1
解决办法
3907
查看次数

Poetry 管理 python 包 CLI

我正在使用具有以下结构的 Poetry 开发 Python 包:

/packagename
 /packagename
  /tests
   __init__.py
   test_packagename.py
  __init__.py
  packagename.py
pyproject.toml
Run Code Online (Sandbox Code Playgroud)

所有的包代码都在 packagename.py 中,它以__init__.py.

我想添加一个 CLI,我的目标是在命令行中执行以下操作:

<packagename> <packagefunction>
Run Code Online (Sandbox Code Playgroud)

为此,我使用了 Python 的 click 包并将我的<packagefunction>内部写packagename.py为:

 @click.command()
 def packagefunction():
Run Code Online (Sandbox Code Playgroud)

目前,我已将入口点添加到诗歌配置文件中:

[tool.poetry.scripts]
<packagefunction> = '<packagename>:<packagefunction>'
Run Code Online (Sandbox Code Playgroud)

并运行:

poetry run <packagefunction>
Run Code Online (Sandbox Code Playgroud)

完美执行。

但是,我知道这不是正确的方法,我希望 CLI 使用上面显示的命令执行。

python command-line-interface python-click python-poetry

9
推荐指数
1
解决办法
2482
查看次数

诗歌| AttributeError“链接”对象没有属性“名称”

我想从poetry.lock文件安装包;使用poetry install

\n

然而,大多数包都会抛出完全相同的错误,这表明存在共同的基本问题。

\n

是什么原因造成的?标准修复是什么?

\n
\n

规格:

\n
    \n
  • Windows 10,
  • \n
  • Visual Studio 代码,
  • \n
  • Python 3.8.10 和诗歌 1.1.11,
  • \n
  • Ubuntu 狂欢。
  • \n
\n

终端:

\n
    \n
  • rm poetry.lock
  • \n
  • poetry update
  • \n
  • poetry install
  • \n
\n
me@PF2DCSXD:/mnt/c/Users/user/Documents/GitHub/workers-python/workers/composite_key$ poetry update\nUpdating dependencies\nResolving dependencies... (217.2s)\n\nWriting lock file\n\nPackage operations: 55 installs, 8 updates, 0 removals\n\n  \xe2\x80\xa2 Updating pyparsing (3.0.4 -> 2.4.7)\n  \xe2\x80\xa2 Updating pyyaml (5.4.1 -> 6.0)\n  \xe2\x80\xa2 Installing arrow (1.2.1)\n  \xe2\x80\xa2 Installing chardet (4.0.0)\n  \xe2\x80\xa2 …
Run Code Online (Sandbox Code Playgroud)

python-poetry

9
推荐指数
2
解决办法
9905
查看次数

MyPy 找不到我的本地包的类型

我有两个 python 包。一种是 util 库,一种是将使用 util 库的应用程序(最终我将有更多应用程序共享该库。

path我对两者都使用诗歌,并且应用程序使用和属性将公共库指定为依赖项develop

例如,我的布局看起来像这样:

- common/
   - common/
      - __init__.py
      - py.typed
   - pyproject.toml

- myapp/
   - myapp/
      - __init__.py
      - py.typed
   - pyproject.toml
Run Code Online (Sandbox Code Playgroud)

看起来myapp\pyproject.toml像这样:

[tool.poetry]
name = "myapp"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]

[tool.poetry.dependencies]
python = "^3.9"
common = { path = "../common", develop = true }

[tool.poetry.dev-dependencies]
mypy = "^0.910"
flake8 = "^4.0.1"
black = {version = "^21.12b0", allow-prereleases = true}
pytest …
Run Code Online (Sandbox Code Playgroud)

python mypy python-typing python-poetry

9
推荐指数
1
解决办法
3732
查看次数

Python 诗歌和脚本入口点

我尝试使用 Poetry 和脚本选项来运行脚本。就像这样:

\n

pyproject.toml

\n
[tool.poetry.scripts]\nxyz = "src.cli:main"\n
Run Code Online (Sandbox Code Playgroud)\n

文件夹布局

\n
   .\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 run-book.txt\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 cli.py\n
Run Code Online (Sandbox Code Playgroud)\n

然后我像这样执行安装:

\n
\xe2\x9d\xaf poetry install\nInstalling dependencies from lock file\n\nNo dependencies to install or update\n
Run Code Online (Sandbox Code Playgroud)\n

如果我然后尝试运行该命令,则找不到(?)

\n
\xe2\x9d\xaf xyz\nzsh: command not found: xyz\n
Run Code Online (Sandbox Code Playgroud)\n

我在这里错过了什么吗?谢谢,

\n

python python-poetry

9
推荐指数
1
解决办法
9892
查看次数

如何在由 Poetry 构建的 Wheel 中包含共享对象文件

我有一个简单的包,其中包含 C 扩展。我正在使用 Poetry 管理我的依赖关系和构建过程。

当我运行时poetry build,扩展被编译并包含在 .tar.gz 存档中,但不在 .whl 中,我不明白为什么。从 tar.gz 归档文件安装的 pip 按预期工作,但由于 Wheel 缺少 .so,pip 安装 Wheel 会导致软件包无法使用。

我已经从这里提升了构建机制:https ://github.com/python-poetry/poetry/issues/2740

pyproject.toml

[tool.poetry]
name = "python_ctypes"
version = "0.1.0"
description = ""
authors = ["Me"]
include = [
    {path = "_extensions/*.so", format = "wheel"}
]

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

[tool.poetry.dev-dependencies]

[tool.poetry.build]
generate-setup-file = false
script = "build.py"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Run Code Online (Sandbox Code Playgroud)

build.py

"""Poetry build script for python_ctypes"""
import os …
Run Code Online (Sandbox Code Playgroud)

python python-wheel python-poetry

9
推荐指数
0
解决办法
3957
查看次数

如何正确更改用诗歌构建的包名称?

我使用poetry包管理器构建了一个包,但我后悔命名它,因为它听起来有点幼稚。

此外,由于poetry的默认行为是强制将项目名称更改为小写(SuperPackage--> superpackage),因此很难在包的主目录内部/外部导入包。

这是一个目录结构示例:

SuperPackage/
    - superpackage/
    - mysubpackage/
        - __init__.py
        - utils.py
        - foo.py
    - tests/
        - __init__.py
        - test_superpackage.py
    - poetry.lock
    - pyproject.toml
    - README.md
    - README.rst
    - .gitignore
Run Code Online (Sandbox Code Playgroud)

由于这种结构,

SuperPackage/
    - superpackage/
    - mysubpackage/
        - __init__.py
        - utils.py
        - foo.py
    - tests/
        - __init__.py
        - test_superpackage.py
    - poetry.lock
    - pyproject.toml
    - README.md
    - README.rst
    - .gitignore
Run Code Online (Sandbox Code Playgroud)

现在,我想SuperPackage改为nicepackage.

我该如何实现这一目标?我无法用谷歌搜索它,也许是因为它非常不常见或者太明显了。我应该更改文件"name"中的字段吗?pyproject.toml

但是,我不确定是否可以(并且建议)"name"直接更改字段。

[tool.poetry]
name …
Run Code Online (Sandbox Code Playgroud)

python package python-poetry pyproject.toml

9
推荐指数
1
解决办法
1万
查看次数