首页 > 解决方案 > 从 Python 3 中的嵌套文件夹导入库

问题描述

我有这样的代码结构,其中 some_lib 应该与 pip/setuptools 一起安装

mainApp.py
submodule
   |some_lib
      |__init__.py
      |some_lib.py
      |helpers
          |helpers.py

我想从 mainApp.py 导入 some_lib.py。

如果我有这样的结构,我可以轻松做到:

mainApp.py
some_lib
   |__init__.py
   |some_lib.py
   |helpers
       |helpers.py

但是我的目标是将此库添加为子模块,并能够覆盖系统中安装的库。

问题是 some_lib 想要导入这样的东西:from some_lib.helper import SomeStuff,这会导致系统中使用 pip 安装的库,因为我的包是submodule.some_lib.helper

我可以通过将库位置添加到搜索路径来解决它

import sys
sys.path.insert(0, my_lib_location)

但这对我来说似乎不正确,我认为以后会导致问题。我想知道是否有其他方法可以做到这一点,而无需触及搜索路径。另外,我想保持它与其他版本的兼容并被安装,所以我想避免修改库中的导入。

标签: python

解决方案


您需要__init__.py在子模块的同一级别添加一个并在其中导入库。你也可以把__init__.py里面some_lib留空,

mainApp.py
   |__init__.py
   |submodule
      |some_lib
          |__init__.py
          |some_lib.py
          |helpers
              |helpers.py

这是模板多级 python 包的存储库链接。


推荐阅读