无法从git子模块导入

时间:2019-08-30 14:14:21

标签: python git git-submodules

我在使git子模块正常工作时遇到困难。

我有一个项目read,基本上是一个ProjectA文件和一个带有库文件的子文件夹: mainA.py包含一个mainA.py,基本上就是应该调用的名称,而MainClass仅包含用于计算的脚本和类。

Libraries

ProjectA/ Libraries/ __init__.py library1.py library2.py __init__.py mainA.py 中,我只是做类似的事情:

mainA.py

这工作正常,但是我现在有一个# content of mainA.py from Libraries.library1 import ClassA, ClassB class MainClass: # do stuff if __name__ == '__main__': MainClass() ,需要使用ProjectB中的MainClass,所以我决定将ProjectA作为的git子模块ProjectA

ProjectB

但是现在我正在git submodule add ProjectA_git_url ProjectB/ ProjectA/ mainB.py .gitmodules 中尝试从mainB.py导入MainClass

projectA

我认为发生这种情况是因为现在# content of mainB.py from ProjectA.mainA import MainClass ModuleNotFoundError: No module named 'Libraries' 不再挂在根目录中,而是挂在子模块Libraries中,所以当ProjectA挂起时:

mainA.py

系统找不到from Libraries.library1 import ClassA, ClassB 。 如果我将Libraries更改为:

mainA.py

然后它可以工作,但是我当然不想更改任何内容from ProjectA.Libraries.library1 import ClassA, ClassB ,它只是一个应该独立工作或作为另一个项目的子模块工作的项目

我在做什么错?当ProjectA是子模块时,是否可以从MainClass导入mainA.py

2 个答案:

答案 0 :(得分:0)

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

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

也就是说,就您而言,不应将ProjectA设为ProjectB的子模块,而应使ProjectA是Python依赖项。为ProjectAProjectB创建软件包,并分别安装它们,但允许ProjectBProjectA导入。

依赖性在setup.pyrequirements.txt中声明。

也就是说,如果您坚持使用子模块:要么您必须自己操纵sys.path,要么在mainA.py中进行相对导入:

from .Libraries.library1 import ClassA, ClassB

答案 1 :(得分:0)

在mainB.py中的系统路径中添加子模块路径 假设您的子模块路径为“ ../ProjectB/ProjectA” sys.path.append(../ ProjectB / ProjectA)解决了该问题。