簡體   English   中英

Git子模塊在python項目中使用后引發導入錯誤

[英]Git submodule raises import error once used in python project

我在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.pymain.py導入parse.py ,后者導入debug_util.py

您能解釋一下我做錯了什么嗎?有哪些可用的解決方案可以解決此問題?

這是我的.gitmodules文件:

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

預先感謝大家!

Git子模塊非常煩人(至少是我上次玩它們的時候)。 我建議不要使用子模塊,而應該僅使用python自己的依賴項管理。 因此,您的submodule_project將具有其自己的唯一名稱,並打包在myparser-1.2.1類的發行版中,然后您的主項目將依賴於setup.py那個軟件包。

git子模塊的問題(來自git文檔):

  • 克隆[帶有子模塊的項目]時,默認情況下會獲得包含子模塊的目錄,但其中沒有文件
  • 您必須運行兩個命令: git submodule init初始化您的本地配置文件,以及git submodule update以從該項目中獲取所有數據並檢出超級項目中列出的適當提交
  • 如果創建一個新分支,在其中添加一個子模塊,然后切換回不包含該子模塊的分支,則該子模塊目錄仍為未跟蹤目錄
  • 刪除目錄並不困難,但是在目錄中添加目錄可能會有些混亂。 如果確實要刪除它,然后切換回具有該子模塊的分支,則需要運行submodule update --init來重新填充它。
  • 如果您正在使用子模塊,那么這樣做很有可能是因為您確實想在處理主項目中的代碼的同時(或跨多個子模塊)處理子模塊中的代碼。 。 否則,您可能會改用較簡單的依賴項管理系統(例如Maven或Rubygems)。

git子模塊的問題(我自己的觀察):

  • 您經常會發現處於奇怪狀態的子模塊:
    • 您想將子模塊固定在特定的git commit上,但是現在它已經以某種方式漂移了,並且您的頂級項目說有涉及子模塊的更改。
    • 文件以某種方式在子模塊目錄中不斷變化,而git抱怨頂級模塊或子模塊中未進行的臨時更改。
    • 您希望有一個子模塊來跟蹤master ,但是它不能正常工作,現在您已經獲得了不在上游的合並提交。
  • updateinit一級深層子模塊已經很煩人了,但是如果您的子模塊之一也使用子模塊怎么辦?
  • 許多第三方工具無法與子模塊配合使用。 我發現很多第三方工具(例如某些IDE或git的Web界面)並不能很好地對待git的核心部分(處理登台區域,合並,重新設置基數,壓縮,編寫格式正確的提交)消息等),但即使是經驗最豐富的git用戶很少使用的功能,它們也特別糟糕。

您也沒有提到在頂級項目中如何以及在何處設置子模塊。 如果您從頂級項目中粘貼.gitmodules文件,則可能會更有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM