在诗歌中使用相对路径进行pip安装

时间:2020-11-12 15:48:34

标签: pip python-packaging python-poetry

如何指定 pip 诗歌pyproject.toml中可以使用的相对路径?

诗歌成功安装了它们,但是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

1 个答案:

答案 0 :(得分:1)

我很确定 pip 不能处理具有相对路径的依赖项。绝对路径可能没问题。

我的看法是 pip core metadata format中获得依赖关系,因此对于依赖关系,格式为PEP 508,它表示:

PEP-440 [4]中指定的URL参考表单实际上并未在pip中实现,但是由于PPE-440被接受,因此我们使用该格式,而不是pip当前的本机格式。

PEP 440说(强调我):

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

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


相关