Python 将子模块中的模块导入库
我正在开发一个Python库(称之为Python 将子模块中的模块导入库,python,pip,git-submodules,Python,Pip,Git Submodules,我正在开发一个Python库(称之为MyLibrary),它充当许多外部存储库的API。这些外部存储库中的大多数只是代码的集合,它们本身并没有打包为库/包。让我们调用这样一个外部存储库ExternalRepo。我希望能够直接从ExternalRepo导入函数,而无需复制或重写它们 假设ExternalRepo如下所示: ExternalRepo - some_functions.py - main.py - from some_functions import * MyLibrary
MyLibrary
),它充当许多外部存储库的API。这些外部存储库中的大多数只是代码的集合,它们本身并没有打包为库/包。让我们调用这样一个外部存储库ExternalRepo
。我希望能够直接从ExternalRepo
导入函数,而无需复制或重写它们
假设ExternalRepo
如下所示:
ExternalRepo
- some_functions.py
- main.py
- from some_functions import *
MyLibrary
- __init__.py
- api.py
- from .submodules.ExternalRepo.main import *
- submodules
- ExternalRepo
- some_functions.py
- main.py
- from some_functions import *
我希望能够从main.py
导入代码(这本身就是从some_functions.py
导入本地代码)
我认为可以这样做的方法是将整个ExternalRepo
作为子模块添加到我的库中,并从ExternalRepo.main
导入代码。因此,我的目录结构如下所示:
ExternalRepo
- some_functions.py
- main.py
- from some_functions import *
MyLibrary
- __init__.py
- api.py
- from .submodules.ExternalRepo.main import *
- submodules
- ExternalRepo
- some_functions.py
- main.py
- from some_functions import *
但这不起作用,因为当我导入MyLibrary.api时,它找不到模块某些函数,可能是因为它正在根文件夹中查找它,即MyLibrary.some函数,而不是MyLibrary.submodules.ExternalRepo.some函数。我知道我可以通过重写来纠正这个问题使用相对导入的ngExternalRepo.main
,即from。有些函数导入*
,而不是从某些函数导入*
。但问题是,我使用的实际外部存储库有许多这样的导入,并且有更复杂的目录结构。我要么使用forkExternalRepo
,进行这些更改,然后使其与原始文件保持同步,或者基本上复制并重写ExternalRepo.main
及其所有依赖项,并将所有这些直接放入api.py
。这两个选项都很难维护
有什么办法可以解决这个问题吗?一般来说,对于编写依赖项本身不是python库结构的python库(因此不能简单地安装pip)有没有最佳实践?将\uuuu init\uuuuuuuuuuuupy
添加到子模块和外部repo
?