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

时间:2019-01-11 22:15:51

标签: python git

我正在研究一个python项目,该项目具有很多开源依赖,这些依赖可能无法定期维护。我尝试通过将软件包与Git一起添加来将软件包用作子模块。但是当我尝试使用子模块时,出现一条错误消息,提示我所需的模块不可用;当我用pip安装软件包时,它工作正常。并非每个软件包都发生这种情况。我想知道为什么我不能像导入安装包一样使用子模块吗?

(子模块导入相对于pip软件包安装导入似乎缺少模块。)

但是,最好将这些软件包用作子模块,或者只是将所需的软件包和版本号添加到要安装用于生产部署的requirements.txt文件中?

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

2 个答案:

答案 0 :(得分:1)

git是一种开发工具;您可以在开发过程中使用它,但不能在部署过程中使用它。 pip是部署工具;在开发过程中,您可以使用它来安装必要的库;在部署过程中,您的用户使用它来安装具有相关性的软件包。

在开发环境中需要远程存储库中的某些东西时,请使用子模块。例如,如果所述远程存储库包含您需要的Makefile或其他非python文件,而这些文件通常未与pip一起安装。

对于其他所有情况,最好使用pip

答案 1 :(得分:0)

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

我会坚持使用pip,因为它是特定于python的工具,并且比使用git子模块进行此工作更有意义。您也可以将pip指向git存储库,只需确保已安装ssh密钥即可。例如: pip install --upgrade“ git + ssh:// git @ https://repo_url.git@branchname

如果还没有,请尝试Pipenv吗?写出部署清单时,它非常有用。