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

时间:2018-11-27 18:09:14

标签: python dependency-management setup.py pipenv pipfile

背景

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

./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中指定web/Pipfile依赖项的方式:

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

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

问题

pipenv installweb目录内部执行notebooks并不会像我期望的那样安装core库的依赖项!

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

pipenv正在为coreweb应用程序安装依赖项时,如何自动安装notebooks应用程序的依赖项?

1 个答案:

答案 0 :(得分:1)

由于在pipenv问题线程https://github.com/pypa/pipenv/issues/209#issuecomment-337409290

中的此评论找到了解决方案

我继续在RoleEntryPoint中列出core的依赖项。

我已更改setup.pyweb应用程序,以使用notebook软件包的可编辑安装。
这是通过在coreweb目录中运行以下命令来完成的:

notebooks

它产生了差异

pipenv install --editable ../core

现在从[packages] - datascience-core = {path = "./../core"} + datascience-core = {editable = true,path = "./../core"} pipenv install目录运行web将导致notebooks软件包及其依赖项的安装!

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