使用 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
包是一个库。它是notebooks
和web
应用程序的依赖项。
core
包being a library 的依赖项在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
应用程序的依赖项?
【问题讨论】:
【参考方案1】:感谢 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
。现在它无需重新安装本地包即可获取开发更改!
【讨论】:
有没有办法使用 pipenv 的 Pipfile 作为核心?有理由使用 setup.py 吗? @KevenWang 可以在setup.py
文件旁边的核心中拥有Pipfile
。例如,它可以用于帮助开发。 [packages]
部分将有一个 datascience-core = editable = true, path = "."
条目,您可以有一个带有开发工具的 [dev-packages]
部分。但它不能替代setup.py
文件。因为核心包是一个库,而不是一个应用程序,所以我们必须在setup.py
文件而不是Pipfile
中指定它的依赖关系。这可确保 Python 在应用程序安装核心包时安装核心的依赖项。以上是关于使用 pipenv 安装本地依赖项的依赖项的主要内容,如果未能解决你的问题,请参考以下文章