当前位置: 首页 > news >正文

python3 强制使用任意父级相对导入,越过python相对导入限制,拒绝 ImportError

前言

  1. 单纯不喜欢 python 对 点开头的包的限制,好麻烦,遂写了本包,来解决这个问题
  2. 启用本模块后,你可以随时使用 单个点来导入当前目录的模块,也可以使用多个 点导入多级父目录内的模块,而不会报错烦人的模块相对路径限制错误。

解决

写了一个强制相对导入特性,修改了 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_importwith enable_force_relative_import():from .moduleA import return_goodprint(return_good())

example_4.py

from force_relative_import import enable_force_relative_importwith enable_force_relative_import():from ..moduleA import return_goodprint(return_good())

example_5.py

from force_relative_import import enable_force_relative_importwith enable_force_relative_import():from ...moduleA import return_goodprint(return_good())

方法2

使用函数。

example_2.py

from force_relative_import import enable_force_relative_import, global_enable_force_relative_import, global_disable_force_relative_importglobal_enable_force_relative_import()with enable_force_relative_import():from .moduleA import return_goodglobal_disable_force_relative_import()print(return_good())

方法3 (推荐仅用于主程序入口)

仅建议用于主程序,不要用于模块或包。

example_3.py

from force_relative_import import enable_nowfrom .moduleA import return_goodprint(return_good())
http://www.lryc.cn/news/64669.html

相关文章:

  • 面了一个4年经验的测试工程师,自动化都不会也要15k,我也是醉了····
  • Java 实现 YoloV7 人体姿态识别
  • 跨越屏幕:桌面PC端的多端开发框架介绍
  • 高效学习方法和工具推荐,让你事半功倍!
  • 查看Docker容器中RabbitMQ的密码
  • 探索Qt线程编程的奥秘:多角度深入剖析
  • 【R语言】鉴于计算10亿以内训练模型记录for循环的加速
  • C++类和对象 ——构造函数
  • 第2章-分治法
  • 20天能拿下PMP吗?
  • Word处理控件Aspose.Words功能演示:在 Java 中将 Word DOC/DOCX 转换为 PDF
  • 数据安全的重要性
  • 要创建富文本内容?Kendo UI Angular组件有专门的编辑器应对!
  • 工赋开发者社区 | 装备制造企业数字化转型总体框架
  • Python趋势外推预测模型实验完整版
  • KALI入门到高级【第三章】
  • React Native中防止滑动过程中误触
  • 【c语言】函数递归调用
  • SPSS如何进行判别分析之案例实训?
  • Windows 10 字体模糊发虚的问题及解决方法
  • 渔人杯部分wp
  • 测试用例覆盖不全面的解决方法
  • AWS Lambda - 第一部分
  • Java 基础进阶篇(七)—— 面向对象三大特征之三:多态
  • day9 实现UDP通信
  • 自然语言处理(NLP)在放射学报告评价中的应用:应用和技术进展
  • 日常开发为什么需要做Code Review
  • OSPF的优化
  • C++项目中打破循环依赖的锁链:实用方法大全
  • IDEA连接HBase