我在使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
?
答案 0 :(得分:0)
git
是开发工具;您可以在开发过程中使用它,但不能在部署过程中使用它。 pip
是部署工具;在开发过程中,您可以使用它来安装必要的库;在部署过程中,您的用户使用它来安装具有相关性的软件包。
在开发环境中需要远程存储库中的某些东西时,请使用子模块。例如,如果所述远程存储库包含您需要的Makefile或其他非python文件,而这些文件通常未与pip
一起安装。
也就是说,就您而言,不应将ProjectA
设为ProjectB
的子模块,而应使ProjectA
是Python依赖项。为ProjectA
和ProjectB
创建软件包,并分别安装它们,但允许ProjectB
从ProjectA
导入。
依赖性在setup.py
或requirements.txt
中声明。
也就是说,如果您坚持使用子模块:要么您必须自己操纵sys.path
,要么在mainA.py
中进行相对导入:
from .Libraries.library1 import ClassA, ClassB
答案 1 :(得分:0)
在mainB.py中的系统路径中添加子模块路径 假设您的子模块路径为“ ../ProjectB/ProjectA” sys.path.append(../ ProjectB / ProjectA)解决了该问题。