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

import local package during poetry run

我刚刚从 pipenv 过渡到 poetry,但我无法从我在一些脚本中开发的本地包导入包。为了使这个更具体,我的项目看起来像:

pyproject.toml
poetry.lock
bin/
  myscript.py
mypackage/
  __init__.py
  lots_of_stuff.py

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

我 运行 在 using environment variables 上浏览了这篇文章,但 export POETRY_PYTHONPATH=/path/to/roject/root 似乎没有帮助。

经过大量谷歌搜索后,我偶然发现了 the packages attribute within the tool.poetry section 的 pyproject.toml 文件。要在分发中包含本地包,您可以指定

# pyproject.toml

[tool.poetry]
# ...
packages = [
    { include = "mypackage" },
]

现在这些包以可编辑模式安装:)

将本地包(开发中)添加到另一个项目可以这样完成:

poetry add ./my-package/
poetry add ../my-package/dist/my-package-0.1.0.tar.gz
poetry add ../my-package/dist/my_package-0.1.0.whl

如果您希望以可编辑模式安装依赖项,您可以在pyproject.toml 文件中指定它。这意味着本地目录的更改将直接反映在环境中。

[tool.poetry.dependencies]
my-package = {path = "../my/path", develop = true}

在当前预览版 (1.2.0a) 中引入了一个 command line 选项,以避免上述手动步骤:

poetry add --editable /path/to/package

另一种添加包的方法可以在poetry add页面

上找到

如果上述方法不起作用,您可以查看此 discussion

中详述的其他步骤