我在使 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 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 依赖项。为 ProjectA
和 ProjectB
创建包并分别安装它们,但允许 ProjectB
从 ProjectA
导入。
依赖项在 setup.py
或 requirements.txt
中声明。
也就是说,如果您坚持使用子模块:要么您必须自己操作 sys.path
,要么在 mainA.py
中进行相对导入:
from .Libraries.library1 import ClassA, ClassB
https://stackoverflow.com/questions/57728419/
相关文章:
angular - 使用 ngx-image-cropper 在单个图像上使用多个裁剪框
angular6 - 无法在 'getUserMedia' : At least one of au
visual-studio-app-center-distribute - 是否可以在 AppCen
reactjs - GraphQL 返回数据但在代码中未定义
angular - 如何修复 "Could not determine the dependenci
reactjs - 在 React BootStrap 中的行元素之间添加空格
amazon-web-services - 解码 AWS session token
jpa - Spring Data JPA Projection嵌套列表投影接口(interface