代码之家  ›  专栏  ›  技术社区  ›  NI6

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

  •  1
  • NI6  · 技术社区  · 8 年前

    我在python项目中使用git子模块。

    子模块项目如下所示:

    -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
    

    parse.py 提高 ImportError 。一旦导入 正在运行。 只是为了澄清: main.py 进口 debug_util.py

    你能解释一下我做错了什么吗?有什么可用的解决方案来解决这个问题?

    这是我的 .gitmodules 文件:

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

    提前感谢大家!

    1 回复  |  直到 8 年前
        1
  •  2
  •   onlynone    8 年前

    Git Submodules 和他们一起工作很烦人(至少上次我和他们一起玩的时候是这样)。我建议不要使用子模块,而只使用python自己的依赖关系管理。所以你的 submodule_project 将有自己独特的名称,并打包在以下版本中: myparser-1.2.1 ,然后您的主要项目将取决于其 setup.py

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

    • 必须运行两个命令: git submodule init 初始化本地配置文件,以及 git submodule update
    • 删除目录并不困难,但将其放在那里可能会有点混乱。如果确实删除了它,然后切换回具有该子模块的分支,则需要运行 submodule update --init 重新填充。
    • 如果你在使用子模块,很可能是因为你真的想在主项目中(或跨多个子模块)处理代码的同时处理子模块中的代码。否则,您可能会使用更简单的依赖关系管理系统(如Maven或Rubygems)。

    • 您经常发现子模块处于奇怪的状态:
      • 不知怎的,子模块目录中的文件一直在变化,git抱怨顶层或子模块中的未老化更改。
      • 你想要一个子模块来跟踪 master ,但它工作不正常,现在您得到了不在上游的合并提交。
    • 这已经够烦人的了 update init 一级深子模块,但如果您的子模块之一也使用子模块呢?
    • 许多第三方工具不能很好地与子模块配合使用。我发现很多第三方工具(如一些IDE或git的web界面)并不能很好地处理git的核心部分(处理暂存区、合并、重新设置、压缩、编写格式良好的提交消息等),但它们在功能方面尤其糟糕,即使是最有经验的git用户也很少使用。

    .gitmodules