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软件包是一个库。它是notebooks和web应用程序的依存关系。
该core程序包是一个库,其依赖项在setup.py
import setuptools
setuptools.setup(
install_requires=[
'some-dependency',
'another-dependency'
]
)
Run Code Online (Sandbox Code Playgroud)
在web和notebooks应用程序是使用pipenv依赖管理。它们的依赖关系在中指定Pipfile。
例如,这是在web中指定依赖项的方式web/Pipfile:
[packages]
datascience-core = {path = "./../core"}
flask = "~= 1.0"
Run Code Online (Sandbox Code Playgroud)
注意,core依赖关系是本地依赖关系,因此是相对路径。
做一个pipenv install从内部web或notebooks目录,不安装的依赖性core如我所料库!
我还尝试使用Pipfilefor core,希望pipenv会在其图形中将其选中并下载所有嵌套的依赖项。但事实并非如此。
core当pipenv为web或notebooks应用安装依赖项时,如何自动安装应用依赖项?
感谢在pipenv问题线程中的此评论找到了解决方案:https : //github.com/pypa/pipenv/issues/209#issuecomment-337409290
我继续在中列出core的依赖项setup.py。
我已更改web和notebook应用程序以使用可编辑的core软件包安装。
这是通过在web和notebooks目录中运行以下命令来完成的:
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 install从web和notebooks目录运行将导致安装core软件包及其依赖项!
它还解决了另一个非常烦人的问题,那就是pipenv install每次都必须更改core。现在,它无需重新安装本地软件包就可以进行开发更改!