背景
我们有以下高级目录结构的项目*
./datascience/
├── core
│ └── setup.py
├── notebooks
│ └── Pipfile
└── web
└── Pipfile
*为简洁起见,排除了所有不相关的文件和目录
core
包是一个库。它是notebooks
和web
应用程序的依赖项。
core
包是一个库,其依赖项在setup.py
中指定
import setuptools
setuptools.setup(
install_requires=[
'some-dependency',
'another-dependency'
]
)
web
和notebooks
应用程序正在使用pipenv进行依赖关系管理。它们的依赖关系在Pipfile
中指定。
例如,以下是如何在web/Pipfile
:中指定web
依赖项
[packages]
datascience-core = {path = "./../core"}
flask = "~= 1.0"
请注意,core
依赖关系是一个本地依赖关系,因此是相对路径。
问题
从web
或notebooks
目录中执行pipenv install
,并没有像我预期的那样安装core
库的依赖项!
我还尝试将Pipfile
用于core
,希望pipenv能在其图中找到它并下载所有嵌套的依赖项。但事实并非如此。
当pipenv为web
或notebooks
应用程序安装依赖项时,如何自动安装core
应用程序的依赖项?
由于pipenv问题线程中的此注释,找到了一个解决方案:https://github.com/pypa/pipenv/issues/209#issuecomment-337409290
我继续在setup.py
中列出了core
的依赖项。
我已将web
和notebook
应用程序更改为使用core
软件包的可编辑安装
这是通过在web
和notebooks
目录中运行以下操作完成的:
pipenv install --editable ../core
它产生了这种不同的
[packages]
- datascience-core = {path = "./../core"}
+ datascience-core = {editable = true,path = "./../core"}
现在,从web
和notebooks
目录运行pipenv install
将安装core
包及其依赖项!
它还解决了另一个非常烦人的问题,即每次core
发生变化时都必须使用pipenv install
。现在,它在不需要重新安装本地软件包的情况下就可以进行开发更改!