当前位置: 首页 > 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())

相关文章:

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

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

面了一个4年经验的测试工程师,自动化都不会也要15k,我也是醉了····

在深圳这家金融公司也待了几年,被别人面试过也面试过别人,大大小小的事情也见识不少,今天又是团面的一天, 一百多个人都聚集在一起,因为公司最近在谈项目出来面试就2个人,无奈又被叫到面试房间。 整个过程…...

Java 实现 YoloV7 人体姿态识别

1 OpenCV 环境的准备 这个项目中需要用到 opencv 进行图片的读取与处理操作,因此我们需要先配置一下 opencv 在 java 中运行的配置。 首先前往 opencv 官网下载 opencv-4.6 :点此下载;下载好后仅选择路径后即可完成安装。 此时将 opencv\b…...

跨越屏幕:桌面PC端的多端开发框架介绍

目前,随着互联网和移动互联网的发展,多端开发框架已经成为越来越多开发者更好的选择。主要有以下几个方面的前景: 跨平台开发需求不断增加:由于不同平台和设备的差异性,开发人员需要使用不同的编程语言和开发工具来为各…...

高效学习方法和工具推荐,让你事半功倍!

本文介绍了五种高效学习方法,包括制定详细的学习计划、集中注意力、不断复习、采用多种学习方式和利用小休息。同时,还推荐了五个高效学习工具和平台,包括Coursera、Duolingo、Quizlet、Khan Academy和Anki,让你在学习中事半功倍&…...

查看Docker容器中RabbitMQ的密码

要查看Docker容器中RabbitMQ的密码,可以尝试以下几个步骤: 1. 查看容器运行时的环境变量 在Docker容器中,可以通过环境变量来设置RabbitMQ的用户名和密码。因此,可以使用以下命令查看容器的环境变量: docker inspect…...

探索Qt线程编程的奥秘:多角度深入剖析

探索Qt线程编程的奥秘:多角度深入剖析 一、Qt线程编程基础(Qt Threading Basics)1.1 线程概念与基本概念(Thread Concepts and Fundamentals)1.2 Qt线程类简介:QThread(Introduction to Qt Thre…...

【R语言】鉴于计算10亿以内训练模型记录for循环的加速

文章目录 1 前言2 几个循环2.1 100以内的和2.2 100以内奇数和/偶数和 3 多重循环3.1 向量化3.2 合并循环3.3 apply函数3.4 矩阵运算3.5 foreach分解任务 4 讨论 1 前言 笔者主力机是MBAM1芯片(8256),某个下午巩固循环突然思考到个问题&#…...

C++类和对象 ——构造函数

C拷贝构造函数详解 什么是拷贝构造函数?拷贝构造函数的特征默认拷贝构造函数为什么需要显示定义构造函数?拷贝构造函数的调用场景什么时候不需要自己定义拷贝构造函数 什么是拷贝构造函数? 在现实生活中,拷贝构造函数就好像我们上…...

第2章-分治法

第2章-分治法 总分:100分 得分:20.0分 1 . 多选题 中等 10分 有关以下代码,说法正确的是( ABCE) def BinarySearch(s, x, low, high):if (low > high):return -1middle (low high) / 2if (x s[mid…...

20天能拿下PMP吗?

新版大纲,专注于人员、过程、业务环境三个领域,内容贯穿价值交付范围(包括预测、敏捷和混合的方法)。除了考试时间由240分钟变更为230分钟、200道单选题变为180道(包含单选和多选)之外,新考纲还…...

Word处理控件Aspose.Words功能演示:在 Java 中将 Word DOC/DOCX 转换为 PDF

Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理,并…...

数据安全的重要性

数据安全非常重要,因为我们生活在数字化时代,许多信息和数据都以数字形式存储和传输。如果这些数据受到未经授权的访问、篡改、泄露或破坏,会对个人、组织和国家造成严重的损失。 以下是数据安全的重要性: 1. 保护各类隐私&#x…...

要创建富文本内容?Kendo UI Angular组件有专门的编辑器应对!

您的Angular应用程序可能需要允许用户添加带有格式化选项的文本、图像、表格、外观样式和/或链接,使用Kendo UI for Angular的编辑器,可以轻松搞定这些! Kendo UI for Angular是专业级的Angular UI组件库,不仅是将其他供应商提供…...

工赋开发者社区 | 装备制造企业数字化转型总体框架

导读 当前,面对技术、市场以及供应链等多重挑战,在软件定义、数据驱动、数字孪生、大数据、人工智能及元宇宙等技术加持下,装备制造企业不断采用新工艺、新材料,以新模式推动产品快速创新。企业积极关注并探索数字化转型路径&…...

Python趋势外推预测模型实验完整版

趋势外推预测模型实验完整版 实验目的 通过趋势外推预测模型(佩尔预测模型),掌握预测模型的建立和应用方法,了解趋势外推预测模型(佩尔预测模型)的基本原理 实验内容 趋势外推预测模型 实验步骤和过程…...

KALI入门到高级【第三章】

预计更新第一章 入门 1.1 什么是Kali Linux? 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 特…...

React Native中防止滑动过程中误触

React Native中防止滑动过程中误触 在使用React Native开发的时,当我们快速滑动应用的时候,可能会出现误触,导致我们会点击到页面中的某一些点击事件,误触导致页面元素响应从而进行其他操作,表现出非常不好的用户体验。 一、问题…...

【c语言】函数递归调用

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ…...

SPSS如何进行判别分析之案例实训?

文章目录 0.引言1.一般判别分析2.逐步判别分析3.决策树分析 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对判别分析进行阐述。 1…...

4重防护构建安卓安全屏障:APKMirror应用管理全攻略

4重防护构建安卓安全屏障&#xff1a;APKMirror应用管理全攻略 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror 在安卓应用下载的数字丛林中&#xff0c;恶意软件如同潜伏的猎手&#xff0c;时刻准备利用用户对新版本的渴望发起攻击…...

WorkBuddy杀疯了?一群AI专家帮我打工,我在微信里当赛博虾工头!

梦瑶 发自 凹非寺量子位 | 公众号 QbitAI到底是谁说&#xff0c;给老板打工自己就当不成老板的&#xff1f;又是谁说&#xff0c;龙虾不好用、还不听使唤的&#xff1f;反正这些事儿&#xff0c;现在跟我没啥关系了。毕竟现在的我&#xff0c;已经转头当起了「虾工头」&#xf…...

简易CPU设计入门:算术逻辑单元(五)

专栏导航 上一篇&#xff1a;简易CPU设计入门&#xff1a;算术逻辑单元&#xff08;四&#xff09; 专栏目录 下一篇&#xff1a;简易CPU设计入门&#xff1a;算术逻辑单元&#xff08;六&#xff09; 项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了&am…...

Ollama + DeepSeek + 芋道框架 + SearXNG 本地联网搜索完整教程

1. 环境准备与检查 在开始之前,请确保你的环境满足以下条件: 1.1 硬件要求 内存:建议至少8GB可用内存(运行7B模型需要约4-6GB) 硬盘:DeepSeek模型文件约4-5GB空间 CPU/GPU:如有NVIDIA GPU可加速推理(可选) 1.2 软件要求 操作系统:Windows 10/11、macOS、Linux均可 …...

3步搞定ViGEmBus:Windows虚拟游戏手柄驱动终极指南 [特殊字符]

3步搞定ViGEmBus&#xff1a;Windows虚拟游戏手柄驱动终极指南 &#x1f3ae; 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 想要在Windows上体验更丰富的游…...

计算机毕业设计springboot月子中心健康管理系统 基于SpringBoot的母婴护理中心智能管理平台 产后康复中心信息化服务系统

计算机毕业设计springboot月子中心健康管理系统7639p9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联xi 可分享随着国家三胎政策的放开和居民生活水平的提升&#xff0c;现代家庭对产后护理服务的专业化、…...

OpenClaw定时任务管理:Qwen3.5-4B-Claude模型驱动智能提醒系统

OpenClaw定时任务管理&#xff1a;Qwen3.5-4B-Claude模型驱动智能提醒系统 1. 为什么需要AI驱动的定时任务系统 上个月我连续错过了三个重要会议&#xff0c;直到同事发消息询问"人到哪了"才猛然惊醒。这种尴尬促使我开始寻找解决方案——传统日历提醒太被动&#…...

【数据结构与算法】最小生成树Kruskal

1.#include <iostream> #include <algorithm> #include <vector> using namespace std;struct Edge {int u, v, w; // 起点&#xff0c;终点&#xff0c;边权 };vector<Edge> edges; vector<int> parent;// 比较函数&#xff1a;按边权升序排列…...

告别Charles/Fiddler抓包失败:用Magisk TrustUserCerts模块搞定安卓HTTPS拦截

安卓HTTPS抓包全攻略&#xff1a;从Magisk证书安装到防御绕过实战 移动应用安全测试中&#xff0c;HTTPS流量拦截是基础却关键的环节。随着Android系统安全机制的不断升级&#xff0c;传统的抓包方法在Android 7.0及更高版本上频频失效。本文将系统性地介绍基于Magisk的解决方案…...

nli-distilroberta-baseAI应用:心理健康聊天机器人对话逻辑连贯性监测

NLI DistilRoBERTa Base AI应用&#xff1a;心理健康聊天机器人对话逻辑连贯性监测 1. 项目概述 心理健康聊天机器人正成为越来越多人寻求心理支持的重要工具。然而&#xff0c;这类对话系统面临一个关键挑战&#xff1a;如何确保对话内容的逻辑连贯性&#xff1f;这正是nli-…...