python - 从 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)
但这对我来说似乎不正确,我认为以后会导致问题。我想知道是否有其他方法可以做到这一点,而无需触及搜索路径。另外,我想保持它与其他版本的兼容并被安装,所以我想避免修改库中的导入。
解决方案
您需要__init__.py
在子模块的同一级别添加一个并在其中导入库。你也可以把__init__.py
里面some_lib
留空,
mainApp.py
|__init__.py
|submodule
|some_lib
|__init__.py
|some_lib.py
|helpers
|helpers.py
这是模板多级 python 包的存储库链接。
推荐阅读
- scala - 类型参数以确保关系运算符
- qt - 如何使 setWindowIcon 在独立的可执行文件(Qt5.14 + VS2019)中正常工作?
- javascript - 事务中的 Firebase 函数 admin.database() 空参数
- c# - C# Caliburn Micro 管理窗口/视图
- python - 返回函数是干什么用的?
- mysql - 如何在 MySQL 视图中安全地将名称转换为“经过清理的别名”?
- google-bigquery - BigQuery API 可以使用 create_table()(表插入)覆盖现有表/视图吗?
- c - 代码块运行我的代码并提供所需的输出,但随后说 link.exe 已停止工作
- powershell - Get-Command -Module MicrosoftTeams 不包括 Get-TeamChannelUser cmdlet
- javascript - 无法将字符串转换为数字