标签: python-poetry

在诗歌运行期间导入本地包

我刚刚从 过渡到pipenvpoetry并且在从我在一些脚本中开发的本地包导入包时遇到问题。为了使这一点更具体,我的项目看起来像:

pyproject.toml
poetry.lock
bin/
  myscript.py
mypackage/
  __init__.py
  lots_of_stuff.py
Run Code Online (Sandbox Code Playgroud)

之内myscript.py,我import mypackage。但是当我poetry run bin/myscript.py得到一个时ModuleNotFoundError,因为PYTHONPATH不包括该项目的根。有了pipenv,我可以通过PYTHONPATH=/path/to/project/root.env文件中指定来解决这个问题,该文件将在运行时自动加载。导入带有诗歌的本地包的正确方法是什么?

我遇到了这篇关于使用环境变量的文章,但export POETRY_PYTHONPATH=/path/to/roject/root似乎没有帮助。

python virtualenv python-poetry

18
推荐指数
2
解决办法
3万
查看次数

如何让 tox 和诗歌一起工作以支持测试 Python 依赖项的多个版本?

我切换当前使用的一个项目pipenv,以poetry作为一个测试,看看差别是什么。该项目是一个简单的、可再分发的 Django 应用程序。它支持 Python 3.6-8,以及 Django 2.2 和 3.0。我有一个tox.ini文件,涵盖了 Python 和 Django 的所有组合,因此:

[tox]
envlist = py{36,37,38}-django{22,30}

[testenv]
whitelist_externals = poetry
skip_install = true

deps =
    django22: Django==2.2
    django30: Django==3.0

commands =
    poetry install -vvv
    poetry run pytest --cov=my_app tests/
    poetry run coverage report -m
Run Code Online (Sandbox Code Playgroud)

我遇到的问题(pipenv世界上不存在)是该poetry install语句将始终用文件中的任何内容覆盖该deps部分中的任何内容poetry.lock(如果它不存在,它将自动生成)。这意味着测试矩阵永远不会针对 Django 2.2 进行测试 - 因为默认情况下每个 tox virtualenv 都会安装 Django 3.0。

我不明白这应该如何工作 - 是否应该使用poetry尊重正在安装的现有环境来安装依赖项?

所以 - 我的问题是 - …

django tox python-poetry

17
推荐指数
1
解决办法
3977
查看次数

如何跨架构使用 python-poetry?

我的主要开发机器是(Raspberry Pi) x86_64,而我的一些部署环境是arm7vl(Raspberry Pi)。对于大多数 Python 开发来说,这不是问题,但某些 Python 库仅在PyPI forx86_64piwheels for aarmv7l. 这导致使用诗歌遇到一些困难。作为一个简单的示例,这是在计算机pyproject.toml上创建的文件x86_64

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

[tool.poetry.dependencies]
python = "^3.9"
opencv-python = "^4.5.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.lock文件包含从 PyPI 中提取的文件的哈希值,当您运行时,poetry install一切都会按预期工作。 但是,如果将这两个文件复制到 Raspberry Pi,安装将无法找到合适的.whl文件,因此会退回到尝试从源代码构建,这大约需要 2 小时并且失败:-(

要使其在 Pi 上工作,您需要将此块添加到pyproject.toml

[[tool.poetry.source]]
name = "piwheels"
url …
Run Code Online (Sandbox Code Playgroud)

python x86-64 armv7 raspberry-pi python-poetry

17
推荐指数
1
解决办法
3126
查看次数

模块“virtualenv.create.via_global_ref.builtin.cpython.mac_os”没有属性“CPython2macOsArmFramework”

我正在尝试将 python 包安装到BigSur macos 上的venvusing poetry- 上。

\n

我有稳定的 pyenv python

\n
pyenv which python\n/Users/josh/.pyenv/versions/3.8.6/bin/python\n
Run Code Online (Sandbox Code Playgroud)\n

当我执行时。

\n
\n

诗歌外壳 && 诗歌安装

\n
\n

我收到此错误,但不知道该怎么办。

\n
  AttributeError\n\n  module 'virtualenv.create.via_global_ref.builtin.cpython.mac_os' has no attribute \n'CPython2macOsArmFramework'\n\n  at ~/.pyenv/versions/3.8.2/lib/python3.8/importlib/metadata.py:79 in load\n       75\xe2\x94\x82         """\n       76\xe2\x94\x82         match = self.pattern.match(self.value)\n       77\xe2\x94\x82         module = import_module(match.group('module'))\n       78\xe2\x94\x82         attrs = filter(None, (match.group('attr') or '').split('.'))\n       79\xe2\x94\x82         return functools.reduce(getattr, attrs, module)\n       80\xe2\x94\x82 \n       81\xe2\x94\x82     @property\n       82\xe2\x94\x82     def extras(self):\n       83\xe2\x94\x82         match = self.pattern.match(self.value)\n
Run Code Online (Sandbox Code Playgroud)\n

欢迎任何解决问题的想法!

\n

pyenv python-poetry macos-big-sur

17
推荐指数
4
解决办法
2万
查看次数

诗歌 - 当版本不兼容时强制安装?

Poetry 有一个非常好的版本解算器,有时太好了:) 我试图在一个使用两个不兼容的包的项目中使用 Poetry。然而,它们仅通过声明是不兼容的,因为其中之一不再开发,但除此之外它们可以很好地协同工作。

使用 pip,我可以在一个环境中安装它们(打印错误)并且它可以工作。Poetry 将声明无法解析依赖项版本并拒绝安装任何内容。

有没有办法强制诗歌安装这些不兼容的依赖项?谢谢你!

python python-poetry

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

如何编写一个可以安装包的最小工作 pyproject.toml 文件?

Pip 支持该pyproject.toml文件,但到目前为止,新模式的所有实际使用都需要一个 3rd 方工具来自动生成这些文件(例如,诗歌和 pip)。不像setup.py已经是人类可写的,pyproject.toml不是(还)。

setuptools 文档

[build-system]
requires = [
  "setuptools >= 40.9.0",
  "wheel",
]
build-backend = "setuptools.build_meta"
Run Code Online (Sandbox Code Playgroud)

但是,此文件不包含包依赖项(如 PEP 621 中所述)。Pip 确实支持使用安装包,pyproject.toml但 pep 没有指定如何pyproject.toml为官方构建系统编写包依赖项setuptools

我如何编写包依赖项pyproject.toml


相关的 StackOverflow 问题:

setuptools python-packaging python-poetry pyproject.toml pep517

16
推荐指数
1
解决办法
4537
查看次数

如何使用诗歌安装 python 包?

我正在将项目迁移到诗歌,但这里遇到了问题。这是一个简单的项目,不需要很多模块。我安装了诗歌,用于poetry add添加一些所需的包然后运行poetry install,但它似乎没有在我的 venv 中安装 pandas。我的pyproject.toml看起来像这样:

[tool.poetry]
name = "***"
version = "0.1.0"
description = ""
authors = ["***"]

[tool.poetry.dependencies]
python = "^3.9"
pandas = "^1.2.2"
numpy = "^1.20.1"

[tool.poetry.dev-dependencies]

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

然后我运行:

PS C:\****> poetry install 
Installing dependencies from lock file

No dependencies to install or update
Run Code Online (Sandbox Code Playgroud)

最后,当我想运行使用 pandas 的 main.py 脚本时,它说没有名为 pandas 的模块:

PS C:\***> python main.py
Traceback (most recent call last):
  File "C:\***\main.py", line 1, in …
Run Code Online (Sandbox Code Playgroud)

python installation module package python-poetry

16
推荐指数
2
解决办法
5万
查看次数

使用诗歌 shell 时如何动态设置环境变量?

当我通过 激活虚拟环境时poetry shell,GPG 签名会变得混乱,因为$GPG_TTY是为父 shell 设置的。所以每次我用的时候poetry shell我都要做GPG_TTY=$(tty)。有没有办法自动执行此操作?理想情况下,我会在全球范围内设置一次,而不是为每个诗歌项目设置一次。

gnupg virtualenv tty python-poetry

16
推荐指数
2
解决办法
2万
查看次数

如何使用 Windows + WSL2 在 Pycharm 中配置 Poetry 环境?

TL;DR:无法使用 WSL 中的现有 Poetry 环境在 PyCharm (Windows) 上配置 Python 解释器。当尝试在 下设置 Poetry 环境路径时Add Python Interpreter > Poetry Environment > Existing Environment,所需的 Python 可执行文件根本不显示。我究竟做错了什么?

=================================================== ==

详细信息:

我在 Windows 11 上使用 PyCharm Pro 2021.3,Python 在 WSL2 (Ubuntu 20.04) 上运行。我正在尝试为我在 WSL2 上创建的现有 Poetry 环境添加一个 python 解释器,但它似乎不起作用。

PyCharm 目前对 Poetry 的支持是通过采用这个插件。根据我从插件的官方文档中收集到的信息,为了使用现有的 Poetry 环境定义解释器,我转到Python Interpreter > Add > Poetry Environment,选择Existing environment,然后输入该特定环境的路径: 在此输入图像描述

为了找到该环境的路径,我运行“ poetry env info ”,它给出了以下模式的路径:

\\wsl$\Ubuntu-20.04\home\$USER$\.cache\pypoetry\virtualenvs\my-pretty-project-<some-hash>-py3.8\

在环境中运行时which python,我看到 …

python pycharm python-poetry wsl-2 ubuntu-20.04

16
推荐指数
1
解决办法
5691
查看次数

如何在诗歌中创建一个全新的虚拟环境或复制现有的虚拟环境?(一个项目中的多个环境)

我有一个项目和一个用诗歌创建的现有虚拟环境(诗歌安装/init)。因此,据我所知,虚拟环境的目的是避免修改系统基础环境和隔离的可能性(每个项目、每个开发、每个系统等......)。

如何为我的诗歌项目创造另一个全新的环境?我最终如何复制和使用现有的?

我的意思是当前的(激活的)不应该参与其中(除了最终复制它),因为我想测试另一组依赖项和代码。

我知道这一点:

python virtualenv python-poetry

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