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

这篇具有很好参考价值的文章主要介绍了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_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文章来源地址https://www.toymoban.com/news/detail-430280.html

from force_relative_import import enable_now

from .moduleA import return_good

print(return_good())


到了这里,关于python3 强制使用任意父级相对导入,越过python相对导入限制,拒绝 ImportError的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图形学、02 推导证明 | 任意一点经过透视投影后 z 坐标相对于之前有什么变化

    齐次坐标知识点: (begin{bmatrix} x \\\\ y \\\\ z \\\\ 1 \\\\end{bmatrix} Rightarrowbegin{bmatrix} nx \\\\ ny \\\\ nz \\\\ n \\\\end{bmatrix}) 两个都表示同一个点 透视投影:先将远截面按一定规则缩放到跟近截面一样大,然后再正交投影 缩放规则: 远截面 缩放后 (z) 不变,缩放过后大小同近截面相同。 截

    2024年02月08日
    浏览(40)
  • Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named ‘_ssl‘问题

    import _ssl # if we can\\\'t import it, let the error propagate ImportError: No module named _ssl 参考试了好多文章,发现都不太好使,最终找到了解决方案,安装openssl的依赖 centos安装python3.7时,查阅知需要的openssl版本最低为1.0.2,但是centos 默认的为1.0.1,所以需要重新 更新openssl 如果有网,直接在

    2024年01月22日
    浏览(46)
  • Delphi中将ShowMessage,MessageDlg, MessageBox,InputBox,InputQuery及任意模态窗口相对主窗口(父窗口、母窗口)居中

    Delphi中调用系统的一些Modal模态对话框(如ShowMessage,MessageDlg, Application.MessageBox,InputBox,InputQuery等),一般是屏幕居中,也有其他窗体的TForm.Position未定义主窗口居中poMainFormCenter,若主窗口不在屏幕中间或多个显示屏时,这些对话框位置就不在主窗口中间,既不美观也不便于操作

    2024年01月20日
    浏览(33)
  • [Bug 记录] Pycharm 无法导入 _C,相对、绝对路径都报错

      在Pychram中调代码的时候,发现有的包必须在python3.8以上版本上才能使用,于是重新配置python3.9的环境。结果出事了,之前还能运行的代码怎么都运行不了,编译的库成功了,就是 from xx import _C 一直报错。最后试出来还有就是相对路径也报错,根据这点发现问题。   首

    2024年02月16日
    浏览(50)
  • 反射的作用( 越过泛型检查 和 可以使用反射保存所有对象的具体信息 )

    反射是作用在运行时的技术,此时集合的泛型将不能产生约束了,此时是可以 为集合存入其他任意类型的元素的 。 泛型只是在编译阶段可以约束集合只能操作某种数据类型,在 编译成Class文件进入 运行阶段 的时候,其真实类型都是不带泛型的集合,泛型相当于被擦除了。

    2024年02月08日
    浏览(45)
  • 如何导入Maven的Mysql任意版本依赖包

    最近初次学javaweb,遇到了很多bug,以此写博客来记录一下这些遇到的问题以及找到的解决办法,与大家共勉。今天在pom.xml导入maven的mysql依赖包时,发现只一直提示5版本的mysql,但是电脑上的mysql是8版本的,一直是爆红状态,所以去百度了一下如何导入以前没有用过的jar包。

    2024年02月16日
    浏览(46)
  • python3 使用虚拟环境 venv

    在 Python 3.3 及更高版本中,Python标准库中提供了 venv 模块,可以用于创建Python虚拟环境。以下是 debian10 系统使用venv模块创建 Python3.11 虚拟环境的示例,按照以下步骤进行操作: 进入你的项目目录: 创建一个名为venv的虚拟环境: 这将在当前目录下创建一个名为venv的目录,并

    2023年04月09日
    浏览(40)
  • 如何在 Python3 中使用变量

    介绍 变量 是一个重要的编程概念,值得掌握。它们本质上是在程序中用于表示值的符号。 本教程将涵盖一些变量基础知识,以及如何在您创建的 Python 3 程序中最好地使用它们。 从技术角度来说,变量是将存储位置分配给与符号名称或标识符相关联的值。变量名用于在计算

    2024年01月17日
    浏览(42)
  • Python3使用urllib访问网页

    改教程翻译自python官网的一篇文档。 urllib.request 是一个用于访问URL(统一资源定位符)的Python模块。它以 urlopen 函数的形式提供了一个非常简单的接口,可以访问使用多种不同协议的URL。它也提供了一个稍微复杂一些的接口,用来处理常用的情况——如基本的认证,cookies,代理

    2024年02月08日
    浏览(49)
  • 使用 Python3 获取网页源代码

            爬虫的数据爬取量非常大,显然不可能对每个页面都手动复制源代码,因此就有必要使用自动化的方式来获取网页源代码。requests是Python的一个第三方HTTP(Hypertext Transfer Protocol,超文本传输协议)库,它比Python自带的网络库urllib更加简单、方便和人性化。使用re

    2023年04月16日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包