gpt4 book ai didi

python - Git 子模块在 python 项目中使用后会引发导入错误

转载 作者:行者123 更新时间:2023-12-01 02:45:26 26 4
gpt4 key购买 nike

我在 python 项目中使用 git-submodule。

子模块项目如下所示:

-submodule_project
- __init__.py
- debug_util.py
- parsing_util
- __init__.py
- parse.py
- consts.py

parse.py 导入 debug_util.py。这种结构工作正常,因为子模块是一个独立的项目。

我的项目是这样构建的:

-project
- __init__.py
- file1.py
- some_dir
- __init__.py
- main.py

因此,一旦我在项目中使用该子模块作为 git 子模块,parse.py 就会引发ImportError。一旦运行导入 debug_util.py 的行,就会发生这种情况。只是为了澄清: main.py 导入 parse.py,它导入 debug_util.py

您能否解释一下我做错了什么,以及解决此问题的可用解决方案是什么?

这是我的 .gitmodules 文件:

[submodule "submodule_project"]
path = submodule_project
url = ../submodule_project.git

提前感谢大家!

最佳答案

Git Submodules与他们一起工作非常烦人(至少我上次和他们一起玩时是这样)。我建议不要使用子模块,而只使用 python 自己的依赖管理。因此,您的 submodule_project 将拥有自己的唯一名称,并打包在 myparser-1.2.1 等版本中,然后您的主项目将依赖于其 中的该包>setup.py.

git 子模块的问题(来自 git 文档):

  • 当您克隆[包含子模块的项目]时,默认情况下您会获得包含子模块的目录,但其中还没有任何文件
  • 您必须运行两个命令:git submodule init 来初始化本地配置文件,以及 git submodule update 来从该项目中获取所有数据并检查相应的数据。提交在您的 super 项目中列出
  • 如果您创建一个新分支,在其中添加一个子模块,然后切换回没有该子模块的分支,则子模块目录仍然是未跟踪的目录
  • 删除该目录并不困难,但将其放在那里可能会有点困惑。如果您确实删除了它,然后切换回具有该子模块的分支,则需要运行 submodule update --init 来重新填充它。
  • 如果您正在使用子模块,那么您这样做很可能是因为您确实希望在处理主项目(或跨项目)中的代码的同时处理子模块中的代码。几个子模块)。否则,您可能会使用更简单的依赖管理系统(例如 Maven 或 Rubygems)。

git 子模块的问题(我自己的观察):

  • 您经常会发现子模块处于奇怪的状态:
    • 您想将子模块固定在特定的 git 提交上,但现在它以某种方式发生了漂移,并且您的顶级项目表示存在涉及您的子模块的更改。
    • 不知何故,文件在子模块目录内不断变化,并且 git 提示顶层或子模块中的未暂存更改。
    • 您想要一个子模块来跟踪 master,但它无法正常工作,而且现在您已经获得了非上游的合并提交。
  • 更新初始化一层深的子模块已经够烦人的了,但是如果您的子模块之一也使用子模块怎么办?
  • 许多第三方工具不能很好地与子模块配合使用。我发现很多第三方工具(比如一些 IDE 或 git 的 Web 界面)并没有真正很好地处理 git 的核心部分(处理暂存区、合并、 rebase 、压缩、编写格式良好的提交)消息等),但它们的功能尤其糟糕,即使是最有经验的 git 用户也很少使用。

您也没有提及如何以及在何处从顶级项目设置子模块。如果您从顶级项目粘贴 .gitmodules 文件可能会更有帮助。

关于python - Git 子模块在 python 项目中使用后会引发导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45305101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com