gpt4 book ai didi

python - 无法从 git 子模块导入

转载 作者:行者123 更新时间:2023-12-05 08:11:25 24 4
gpt4 key购买 nike

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

我有一个项目 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 需要使用 ProjectA 中的 MainClass,所以我决定将 ProjectA 作为 ProjectB

的 git 子模块
git submodule add ProjectA_git_url

ProjectB/
ProjectA/
mainB.py
.gitmodules

但是现在在 mainB.py 中,我正在尝试从 projectA 导入 MainClass

# content of mainB.py
from ProjectA.mainA import MainClass

ModuleNotFoundError: No module named 'Libraries'

我认为发生这种情况是因为现在 Libraries 不再卡在根目录下,而是卡在子模块 ProjectA 中,所以当 mainA.py 确实:

from Libraries.library1 import ClassA, ClassB

系统找不到。如果我将 mainA.py 更改为:

from ProjectA.Libraries.library1 import ClassA, ClassB

然后它就可以工作了,但是当然我不想改变 ProjectA 中的任何东西,它只是一个应该独立工作或作为另一个项目的子模块工作的项目

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

最佳答案

git 是一个开发工具;您在开发期间使用它但不在部署期间使用它。 pip 是一个部署工具;在开发过程中,您使用它来安装必要的库;在部署期间,您的用户使用它来安装具有依赖项的包。

当您需要从您的开发 环境中的远程存储库获取某些内容时,请使用子模块。例如,如果所述远程存储库包含您需要的 Makefile 或其他非 Python 文件,并且通常不会使用 pip 安装。

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

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

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

from .Libraries.library1 import ClassA, ClassB

关于python - 无法从 git 子模块导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57728419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com