【问题标题】:Using git submodules with python在 python 中使用 git 子模块
【发布时间】:2021-03-07 07:56:09
【问题描述】:

我在这个网站上阅读了很多关于 git 子模块使用的博客文章和问题,但仍然不知道如何更好地在 python 中使用它们。

我的意思是,如果我有这样的包,管理依赖项的更简单方法是什么:

├── mypkg
│   └── __init__.py
├── setup.py
└── submodules
    ├── subm1
    └── subm2

那么,如果我需要使用“mypkg”作为“top_level_pkg”的子模块怎么办:

├── setup.py
├── submodules
│   └── mypkg
└── top_level_package
    └── __init__.py

,我想运行pip install . 并正确解决所有问题(将每个子模块按正确顺序安装到 VENV)。

我尝试过的:

  • 使用在子进程中运行的“pip”安装每个子模块。但这似乎是一种 hacky 方式且难以管理 (Unexpected installation of GIT submodule)
  • 将“install_requires”与“setuptools.find_packages()”一起使用,但没有成功
  • 为每个子模块使用 requirements.txt 文件,但我找不到自动化的方法,因此“pip”可以自动安装所有子模块的所有需求。

理想情况下,我设想每个带有install_requires=['submodules/subm1', 'submodules/submn'] 的子模块都有一个单独的 setup.py 文件,但 setuptools 不支持它。

【问题讨论】:

  • 子模块是否有自己的setup.py?换句话说,它们是 pip 可独立安装的项目吗?
  • @sinoroc,是的,完全正确。
  • 你试过install_requires=['subm1 @ submodules/subm1', '...']吗?
  • 否则你可能根本不需要子模块:install_requires=['subm1 @ git+https://repo.dev/subm1.git', '...'].
  • @sinoroc,不,我什至没有在文档中注意到这种语法。谢谢,我试试看。

标签: python git setuptools


【解决方案1】:

我并不是说这是不可能的,而是非常困难和非常棘手。更安全的方法是将每个子模块转换为可安装的 Python 模块(使用它自己的 setup.py)并从 Git 安装子模块。

此链接描述了如何使用 setup.py 从 Git 安装软件包:https://stackoverflow.com/a/32689886/2952185

【讨论】:

    【解决方案2】:

    感谢 Gijs Wobben 和 sinoroc 我想出了适合我的情况的解决方案:

    install_requires=['subm1 @ file://localhost/<CURENT_DIR>/path/to/subm1']
    

    【讨论】:

      猜你喜欢
      • 2016-11-13
      • 1970-01-01
      • 2013-04-07
      • 2015-04-24
      • 1970-01-01
      • 2012-05-18
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多