什么时候在 Python 中使用公共包作为子模块与使用 pip 安装有意义



我正在开发一个python项目,该项目有许多开源依赖项,这些依赖项可能不会定期维护。我尝试通过使用 Git 添加包作为子模块;但是当我尝试使用该子模块时,我收到一条错误消息,指出我想要的模块不可用;当我使用 pip 安装软件包时,它工作正常。并非每个包裹都发生这种情况。我想知道为什么我不能像简单地导入已安装的软件包那样使用子模块?

(子模块导入与 pip 包安装导入中似乎缺少模块。

但是,将这些包

用作子模块还是仅将所需的包和版本号添加到要为生产部署安装的需求.txt文件中更好?

(子模块或包所需的任何其他功能都与包装器一起添加)

git是一个开发工具;你可以在开发过程中使用它,而不是在部署期间使用它。 pip是一个部署工具;在开发过程中,您可以使用它来安装必要的库;在部署期间,用户使用它来安装具有依赖项的包。

当您需要开发环境中远程存储库中的某些内容时,请使用子模块。例如,如果所述远程存储库包含您需要的 Makefile 或其他非 python 文件,并且通常不随 pip 一起安装。

对于其他一切,pip更可取。

我猜你的问题是 git 将子模块并排放在你的项目中,而 Python "无法导入顶级以上"的问题在那里适用。无论哪种方式,您都不希望在 git 意义上使用子模块,您希望将该模块安装到您的 python 环境/虚拟环境的站点包中。

我会坚持使用 pip,因为它是一个特定于 python 的工具,并且作为工作流程比使用 git 子模块更有意义。您也可以将 pip 指向 git 存储库,只需确保安装了 ssh 密钥即可。例如:

pip install --upgrade "git+ssh://git@https://repo_url.git@branchname

另外,如果您还没有尝试过Pipenv?它在编写部署清单时效果很好。

最新更新