无法从git submodu导入

2024-09-19 23:37:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难让git子模块工作。在

我有一个项目ProjectA,它基本上是一个mainA.py文件和一个包含库文件的子文件夹: mainA.py包含一个MainClass,它基本上应该被调用,Libraries只包含用于计算的脚本和类。在

ProjectA/
    Libraries/
        __init__.py
        library1.py
        library2.py
    __init__.py
    mainA.py

mainA.py中,我只是做一些类似的事情:

^{pr2}$

这很好,但是我现在有一个ProjectB,它需要使用来自ProjectA的{},所以我决定将ProjectA作为ProjectB的git子模块

git submodule add ProjectA_git_url

ProjectB/
    ProjectA/
    mainB.py
    .gitmodules

但是现在在mainB.py我正试图从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,它只是一个项目,应该独立工作,或者作为另一个项目的子模块工作

我做错什么了?当ProjectA是子模块时,有没有方法从mainA.py导入{}?在


Tags: 模块文件项目frompyimportgitlibraries
1条回答
网友
1楼 · 发布于 2024-09-19 23:37:17

git是一个开发工具;您可以在开发期间使用它,但不能在部署期间使用它。pip是一个部署工具;在开发期间,您可以使用它来安装必要的库;在部署期间,您的用户使用它来安装具有依赖关系的包。在

当您需要在远程存储库中进行开发时,pip一起安装。在

也就是说,在您的例子中,您不应该将ProjectA作为ProjectB的子模块,而应该使ProjectA成为Python依赖项。为ProjectAProjectB创建包,并分别安装它们,但允许ProjectB从{}导入。在

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

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

from .Libraries.library1 import ClassA, ClassB

相关问题 更多 >