【问题标题】:pip install with relative paths in poetrypip install 与诗歌中的相对路径
【发布时间】:2021-02-24 15:36:45
【问题描述】:

我如何指定 pip 可以在 poetrypyproject.tomlpyproject.toml 中使用的相对路径?

poetry 成功安装它们,但是 pip 失败并出现以下错误:

File "/tmp/pip-build-env-ck09aiax/overlay/lib/python3.7/site-packages/poetry/core/packages/directory_dependency.py", line 36, in __init__
        raise ValueError("Directory {} does not exist".format(self._path))
    ValueError: Directory ../lib_foo does not exist

例子

我有以下存储库结构

.
├── lib_foo
│   ├── lib_foo
│   │   └── __init__.py
│   └── pyproject.toml
└── main_app
    ├── main_app
    │   └── __init__.py
    └── pyproject.toml

main_app 依赖于lib_foo,它的依赖如下所示:
./main_app/pyproject.toml

[tool.poetry.dependencies]
python = "^3.7"
lib-foo = { path = "../lib_foo" }  # also tried  path = "../lib_foo/"

做的时候:

./main_app$ poetry install  # runs successfully 
./main_app$ python -m pip install ../lib_foo/  # runs successfully
./main_app$ python -m pip install .  # fails with the error mentioned above 
./main_app$ python -m pip --version
pip 20.1.1 from ./main_app/my_venv/lib/python3.7/site-packages/pip (python 3.7)


我在开发项目时使用poetry,但是在部署它们时我只想使用pip


一个相关的issue

【问题讨论】:

  • 据我记忆,这是不支持的。问题是在 Python 发行版(sdistwheel)中编写路径有些不稳定,当它是相对路径时更是如此。我会试着找到一些具体的证据,我想我不久前就看到了。
  • @sinoroc 似乎有一个PR 可以解决这个问题?
  • 我认为这无关,我可能错了。
  • 我看到你已经提出了这个问题并在这里得到了答案:github.com/pypa/pip/issues/9127 -- 那么你为什么没有在问题中添加这个链接呢?
  • @sinoroc 将编辑

标签: pip python-packaging python-poetry


【解决方案1】:

我很确定 pip 无法处理具有相对路径的依赖关系。绝对路径可能没问题。

在我看来,pipcore metadata format 中获取依赖关系,因此对于依赖关系,格式为 PEP 508,它表示:

PEP-440 [4] 中指定的 URL 引用形式实际上并未在 pip 中实现,但由于 PEP-440 被接受,我们使用该格式而不是 pip 当前的原生格式。

PEP 440 说(强调我的):

文件 URL 采用 file://<host>/<path> 的形式。如果<host> 被省略,则假定为localhost,即使<host> 被省略第三个斜线必须仍然存在

我天真地解释为所有路径都必须是绝对的。


相关

【讨论】:

  • pip 确实处理相对路径的依赖关系,它似乎有点inconsistency
  • 似乎是,我猜这可能有点反模式?
  • 我不知道...有些事情在某种程度上是可能的,但人们不应该这样做,他们无论如何都会这样做,然后在它不起作用时抱怨。 -- poetry 出于自己的目的允许在pyproject.toml 中这样做很好,但它不应该允许将其写入分发元数据中,因为根本不允许这样做。 ——我想这已经在诗票上讨论过了。 -- 据我所知,PyPI 会明确拒绝上传此类分布(具有相对和绝对路径依赖)。
猜你喜欢
  • 2021-02-28
  • 2012-01-11
  • 2013-10-04
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多