【Python】(自定义函数)模块的相对路径导入

是我以前写的老文章的升级版,本质上使用execsys.path实现相对路径导入。



RelativeImport:

__version__='1.1.0'
__author__='Ls_Jan'import os
import sys
import inspectdef RelativeImport(module,*args):#模块导入'''module为模块所在路径(模块名不需要.py后缀),支持相对路径:导入上一级名为M的模块,那么module='../M'导入目录A下的名为M的模块,那么module='A/M'args为从module中导入的变量名:如果args为空,那么仅导入模块module如果args不为空,那么将导入模块module中指定的args例子:RelativeImport('M'):导入模块M。【等同import M】RelativeImport('M','info','func'):导入模块M中的info和func。【等同于from M import info,func】RelativeImport('M','*'):导入模块M中所有内容。【等同于from M import *】RelativeImport('../M'):导入上级目录中的模块M。RelativeImport('A/M','info'):导入A目录下的模块M中名为info的变量。特别的,支持“重命名”行为:RelativeImport(('M','mmm')):导入模块M并命名为mmm。【等同import M as mmm】RelativeImport('M',('info','i'),('func','f')):导入模块M中的info和func并分别命名为i和f。【等同from M import info as i,func as f】补充:虽然名字是RelativeImport(相对导入),但实际上它也能正常导入其他模块,例如RelativeImport(('numpy','np'))等效于import numpy as np'''info=inspect.stack()[1]#调用者的上下文信息frame=info.framefileName=info.filenamevarG=frame.f_globalsif(type(module)!=tuple):module=(module,None)sourcePath=os.path.dirname(fileName)#调用该函数的文件所在的路径(绝对路径)relativePath,module_exec=os.path.split(module[0])#模块所在目录(相对路径) + 模块名modulePath=os.path.join(sourcePath,relativePath)#模块所在路径(绝对路径)sys.path.append(modulePath)#将路径临时加入到系统列表中if(args):lst=[]for item in args:if(type(item)==tuple):lst.append(f'{item[0]} as {item[1]}')else:lst.append(f'{item}')exec(f'from {module_exec} import {",".join(lst)}',varG)else:if(module[1]):exec(f'import {module_exec} as {module[1]}',varG)else:exec(f'import {module_exec}',varG)sys.path.pop()#移除临时加入的路径


补充:

  • 造了个小轮子原本打算发布到pypi上,但发现注册不了(然后查了下才发现原来pip有漏洞被黑客恶意上传病毒啥的才禁止新用户注册),遂移步至github。
  • 下载轮子,安装轮子,成为轮子 :RelativeImport-1.1-py3-none-any.whl,pip install RelativeImport-1.1-py3-none-any.whl,建议去github查看详细操作(毕竟如果github都上不去那轮子更不可能下载的了。
  • github项目链接:https://github.com/Ls-Jan/Python_RelativeImport/tree/main


参考:

  • 【Python】获取调用者信息: https://blog.csdn.net/weixin_44733774/article/details/134665412
  • python之PypI打包whl文件:https://www.cnblogs.com/yuhaohao/p/13099552.html
  • pip安装本地包:https://blog.csdn.net/enter89/article/details/90291667


本文发布于CSDN,未经个人同意不得私自转载:https://blog.csdn.net/weixin_44733774/article/details/134672481

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数式编程:简洁与效率的完美结合

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

还在担心发抖音没素材跟文案?[腾讯云HAI] AIGC带你蹭热度“今年你失去了什么?”

目录 🐳前言: 🚀了解高性能应用服务 HAI 👻即插即用 轻松上手 👻横向对比 青出于蓝 🐤应用场景-AI作画 🐤应用场景-AI对话 🐤应用场景-算法研发 🚀使用HAI进行…

蓝桥杯day01——根据给定数字划分数组

题目描述 给你一个下标从 0 开始的整数数组 nums 和一个整数 pivot 。请你将 nums 重新排列,使得以下条件均成立: 所有小于 pivot 的元素都出现在所有大于 pivot 的元素 之前 。所有等于 pivot 的元素都出现在小于和大于 pivot 的元素 中间 。小于 piv…

orcad模块化绘制电路

当我们的板子上需要绘制大量的重复电路的时候,手动去绘制就很浪费时间。 orcad 的软件可以进行模块化绘制,将几个原理图包装成一个模块,然后直接去复制模块就可以。 相对来说大大的简化了原理图的设计麻烦程度 下面就是整个的操作流程 最后做…

Router跳转打开新窗口

this.$router.push()无效时,首先要检查路由列表是否正确。 console.log(this.$router.options.routes);跳转 /*本窗口*/// this.$router.push({ path: /filePreview, query: { path: row.path } })/*新打开窗口*/let routeData this.$router.resolve({ path: /fi…

一天之内“三个离职群都满了”;飞行出租车的时代就此开启?丨 RTE 开发者日报 Vol.94

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

每日一练 | 华为认证真题练习Day138

1、IPv6地址FE80::2EO:FCFF:FE6F:4F36属于哪一类? A. 组播地址 B. 任播地址 C. 链路本地地址 D. 全球单播地址 2、如果IPv6的主机希望发出的报文最多经过10台路由器转发,则应该修改IPv6报文头中的哪个参数? A. Next Header B. Version …

【考研or就业】关键的时间节点,暑期实习/秋招/春招大揭秘(文末附时间线图)

【考研or就业】关键的时间节点,暑期实习/秋招/春招大揭秘 一些引言考研初复试暑期实习秋招春招 【考研or就业】关键的时间节点,暑期实习/秋招/春招大揭秘(视频版) 一些引言 ● 之前我个人的选择是比较离谱的那种,考研…

【实验】配置用户通过IPv6方式上网

【赠送】IT技术视频教程,白拿不谢!思科、华为、红帽、数据库、云计算等等https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502【微/信/公/众/号:厦门微思网络】 组网需求 运营商为企业分配了WAN侧的IPv6地址11…

SageMath安装

Sagemath工具是免费开源的,针对数学计算的一个工具。 网页版免安装:https://sagecell.sagemath.org/ Sagemath是根据Linux系统编写的,所以Windows上使用的话,会创建一个Linux系统运行。 1. 安装 Windows本地安装参考&#xff1…

数字人应用行业有哪些?

随着人工智能和虚拟形象技术的不断发展,数字人正运用于各行各业。数字人是通过模型训练和虚拟形象技术创造的虚拟实体,具有自己的外貌、声音和行为。本文将介绍数字人应用行业的几个主要领域,并探讨其重要意义。 一、直播带货和电商领域 1. …

oracle闪回恢复表数据

oracle闪回恢复表数据 1.打开监听和数据库,进入需要操作的表的所属用户下 [oraclemydb ~]$ lsnrctl start [oraclemydb ~]$ sqlplus / as sysdba SQL> startup SQL> conn test/123456 SQL> select * from test1;2.删除任意数据: …

WIFI模块(esp-01s)实现天气预报代码实现

目录 前言 实现图片 一、串口编程的实现 二、发送AT指令 esp01s.c esp01s.h 三、数据处理 1、初始化 2、cjson处理函数 3、核心控制代码 四、修改堆栈大小 前言 实现图片 前面讲解了使用AT指令获取天气与cjson的解析数据,本章综合将时间显示到屏幕 一、…

MyBatis的解析和运行原理

文章目录 MyBatis的解析和运行原理MyBatis的工作原理 MyBatis的解析和运行原理 MyBatis编程步骤是什么样的? 1、 创建SqlSessionFactory 2、 通过SqlSessionFactory创建SqlSession 3、 通过sqlsession执行数据库操作 4、 调用session.commit()提交事务 5、 调用…

lettcode 1089. 复写零

代码&#xff1a; class Solution {public void duplicateZeros(int[] arr) {int cur 0, dest -1, n arr.length;// 1. 先找到最后⼀个需要复写的数while (cur < n) {if (arr[cur] 0) dest 2;else dest 1;if (dest > n - 1) break;cur;}// 2. 处理⼀下边界情况if …

智能优化算法应用:基于多元宇宙算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于多元宇宙算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于多元宇宙算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.多元宇宙算法4.实验参数设定5.算法结果6.参考…

函数版 → 求小于给定整数的最大素数 ← Python

【题目描述】 求小于给定整数的最大素数。【算法分析】 ● 求n以内的最大素数&#xff0c;实现技巧之一是从n-1开始判断其是否为素数&#xff0c;这样可以提升算法效率。 ● 在Python中实现由x至1的递减操作&#xff0c;需要使用 range(x,1,-1)。注意其中的-1。● 在Python中&a…

激光器温度,波长变化

940&#xff0c;波长变化0.3nm/C

linux 驱动——原子操作

文章目录 linux驱动——原子操作原子操作 API原子位操作 API原子操作驱动原子操作 APP linux驱动——原子操作 原子操作 API Linux 内核定义了叫做 atomic_t 的结构体来完成整型数据的原操作&#xff0c;在使用是使用原子变量来代替整型变量。此结构体定义在 include/linux/t…

LeetCode Hot100 226.翻转二叉树

题目&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 递归&#xff1a;深度优先遍历 迭代&#xff1a;广度优先遍历 方法&#xff1a;迭代 class Solution {public TreeNode invertTree(TreeNode root) {if (root null…