python3 强制使用任意父级相对导入,越过python相对导入限制,拒绝 ImportError
前言
- 单纯不喜欢 python 对 点开头的包的限制,好麻烦,遂写了本包,来解决这个问题
- 启用本模块后,你可以随时使用 单个点来导入当前目录的模块,也可以使用多个 点导入多级父目录内的模块,而不会报错烦人的模块相对路径限制错误。
解决
写了一个强制相对导入特性,修改了 import 的实现逻辑,从而允许导入任意父级的包,而不会报以下错误。
ImportError attempted relative import with no known parent package
ImportError attempted relative import beyond top-level package
修改import逻辑的方法来自这里
修改 python3 的 import 函数,从而实现挂钩hook或更改其行为
https://blog.csdn.net/ONE_SIX_MIX/article/details/128717665
仓库
github:https://github.com/One-sixth/force-relative-import
以下为搬过来的仓库介绍。
force-relative-import
这是一个强制启用python相对导入的库,允许你忽略python的相对导入限制。
安装
pip install -U force-relative-import
使用方法
目录示例,example_N 均为直接启动目标
├─example
│ │ example_1.py
│ │ example_2.py
│ │ example_3.py
│ │ moduleA.py
│ │
│ └─example_4
│ │ example_4.py
│ │
│ └─example_5
│ example_5.py
方法1 (推荐用于模块编写)
使用作用域,以避免意外情况。
example_1.py
from force_relative_import import enable_force_relative_import
with enable_force_relative_import():
from .moduleA import return_good
print(return_good())
example_4.py
from force_relative_import import enable_force_relative_import
with enable_force_relative_import():
from ..moduleA import return_good
print(return_good())
example_5.py
from force_relative_import import enable_force_relative_import
with enable_force_relative_import():
from ...moduleA import return_good
print(return_good())
方法2
使用函数。
example_2.py
from force_relative_import import enable_force_relative_import, global_enable_force_relative_import, global_disable_force_relative_import
global_enable_force_relative_import()
with enable_force_relative_import():
from .moduleA import return_good
global_disable_force_relative_import()
print(return_good())
方法3 (推荐仅用于主程序入口)
仅建议用于主程序,不要用于模块或包。
example_3.py
from force_relative_import import enable_now
from .moduleA import return_good
print(return_good())