使用 pipenv 安装本地依赖项的依赖项

Posted

技术标签:

【中文标题】使用 pipenv 安装本地依赖项的依赖项【英文标题】:Installing dependencies of a local dependency with pipenv 【发布时间】:2019-04-29 13:09:41 【问题描述】:

背景

我们的项目具有以下高级目录结构*

./datascience/
├── core
│   └── setup.py
├── notebooks
│   └── Pipfile
└── web
    └── Pipfile

*为简洁起见,排除了所有不相关的文件和目录。

core 包是一个库。它是notebooksweb 应用程序的依赖项。

core 包being a library 的依赖项在setup.py 中指定

import setuptools

setuptools.setup(
    install_requires=[
        'some-dependency',
        'another-dependency'
    ]
)

webnotebooks 应用程序使用 pipenv 进行依赖管理。它们的依赖关系在Pipfile 中指定。

例如,下面是在web/Pipfile 中指定web 依赖项的方式:

[packages]
datascience-core = path = "./../core"
flask = "~= 1.0"

注意core 依赖是本地依赖,因此是相对路径。

问题

webnotebooks 目录中执行pipenv install,不会像我预期的那样安装core 库的依赖项!

我还尝试将Pipfile 用于core,希望 pipenv 能够在其图形中选择它并下载所有嵌套的依赖项。但事实并非如此。

当 pipenv 为 webnotebooks 应用程序安装依赖项时,如何自动安装 core 应用程序的依赖项?

【问题讨论】:

【参考方案1】:

感谢 pipenv 问题线程中的此评论找到了解决方案:https://github.com/pypa/pipenv/issues/209#issuecomment-337409290

我继续在setup.py 中列出core 的依赖项。

我已更改 webnotebook 应用以​​使用core 软件包的可编辑安装。 这是通过在webnotebooks 目录中运行以下命令来完成的:

pipenv install --editable ../core

它产生了这个差异

[packages]
- datascience-core = path = "./../core"
+ datascience-core = editable = true,path = "./../core"

现在从webnotebooks 目录运行pipenv install 会导致安装core 包及其依赖项!

它还解决了另一个非常烦人的问题,即每次core 发生变化时都必须pipenv install。现在它无需重新安装本地包即可获取开发更改!

【讨论】:

有没有办法使用 pipenv 的 Pipfile 作为核心?有理由使用 setup.py 吗? @KevenWang 可以在setup.py 文件旁边的核心中拥有Pipfile。例如,它可以用于帮助开发。 [packages] 部分将有一个 datascience-core = editable = true, path = "." 条目,您可以有一个带有开发工具的 [dev-packages] 部分。但它不能替代setup.py 文件。因为核心包是一个库,而不是一个应用程序,所以我们必须在setup.py 文件而不是Pipfile 中指定它的依赖关系。这可确保 Python 在应用程序安装核心包时安装核心的依赖项。

以上是关于使用 pipenv 安装本地依赖项的依赖项的主要内容,如果未能解决你的问题,请参考以下文章

从 CRAN 镜像安装具有依赖项的本地 R 包

如何强制 Yarn 重新安装软件包?

maven依赖本地非repository中的jar包

安装 BlueJeans 会议 API 客户端时出现“pipenv 需要 #egg 片段以获取版本控制的依赖项”警告

Lerna bootstrap 不链接本地依赖项?

使用 Helm 安装包时如何更改依赖项的值?