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

Den*_*nis 5 python dependency-management setup.py pipenv pipfile

背景

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

./datascience/
??? core
?   ??? setup.py
??? notebooks
?   ??? Pipfile
??? web
    ??? Pipfile
Run Code Online (Sandbox Code Playgroud)

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

core软件包是一个库。它是notebooksweb应用程序的依存关系。

core程序包是一个库,其依赖项在setup.py

import setuptools

setuptools.setup(
    install_requires=[
        'some-dependency',
        'another-dependency'
    ]
)
Run Code Online (Sandbox Code Playgroud)

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

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

[packages]
datascience-core = {path = "./../core"}
flask = "~= 1.0"
Run Code Online (Sandbox Code Playgroud)

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

问题

做一个pipenv install从内部webnotebooks目录,不安装的依赖性core如我所料库!

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

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

Den*_*nis 7

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

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

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

pipenv install --editable ../core
Run Code Online (Sandbox Code Playgroud)

它产生了这个差异

[packages]
- datascience-core = {path = "./../core"}
+ datascience-core = {editable = true,path = "./../core"}
Run Code Online (Sandbox Code Playgroud)

现在pipenv installwebnotebooks目录运行将导致安装core软件包及其依赖项!

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

  • @KevenWang 可以在核心中拥有一个“Pipfile”以及“setup.py”文件。例如,它可以用于帮助开发。`[packages]` 部分将有一个 `datascience-core = {editable = true, path = "."}` 条目,并且您可以有一个包含开发工具的 `[dev-packages]` 部分。但它并不能替代 `setup.py` 文件。因为核心包是一个库,而不是一个应用程序,所以我们必须在“setup.py”文件而不是“Pipfile”中指定其依赖项。这确保了当应用程序安装核心包时,Python 将安装核心的依赖项。 (4认同)
  • 有没有办法使用pipenv的Pipfile作为核心?有理由使用 setup.py 吗? (3认同)