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

根据Python模块的完整路径import动态导入

目录

需求:如何将pkg02/test02.py导入pkg01/test01.py中? 

方法1:使用importlib模块动态导入

对于Python 3.5+

对于Python 3.3、3.4

对于Python 2

方法2:使用runpy模块动态导入

方法3:修改sys.path变量


需求:如何将pkg02/test02.py导入pkg01/test01.py中? 

方法1:使用importlib模块动态导入

对于Python 3.5+

## pkg01/test01.py
import importlib.util
spec = importlib.util.spec_from_file_location('test02', '/root/demo/pkg02/test02.py')
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
print(module)
print(module.args)
module.fun()
module.TestA().testa()
## pkg02/test02.py
print('导入demo/pkg02/test02.py')
args = {'a': 100}
def fun():print('func in demo/pkg02/test02.py')
class TestA:def testa(self):print('TestA.testa in demo/pkg02/test02.py')

对于Python 3.3、3.4

## pkg01/test01.py
from importlib.machinery import SourceFileLoader
loader = SourceFileLoader('test02', '/root/demo/pkg02/test02.py')
module = loader.load_module()
print(module)
print(module.args)
module.fun()
module.TestA().testa()
## pkg02/test02.py
print('导入demo/pkg02/test02.py')
args = {'a': 100}
def fun():print('func in demo/pkg02/test02.py')
class TestA:def testa(self):print('TestA.testa in demo/pkg02/test02.py')

对于Python 2

## pkg01/test01.py
import imp
module = imp.load_source('test02', '/root/demo/pkg02/test02.py')
print(module)
print(module.args)
module.fun()
module.TestA().testa()
#coding=utf-8
## pkg02/test02.py
print('导入demo01/pkg02/test02.py')
args = {'a': 100}
def fun():print('func in demo01/pkg02/test02.py')
class TestA:def testa(self):print('TestA.testa in demo01/pkg02/test02.py')

方法2:使用runpy模块动态导入

## pkg01/test01.py
from runpy import run_path
settings = run_path('/root/demo/pkg02/test02.py')
print(settings['args'])
settings['fun']()
settings['TestA']().testa()
## pkg02/test02.py
print('导入demo/pkg02/test02.py')
args = {'a': 100}
def fun():print('func in demo/pkg02/test02.py')
class TestA:def testa(self):print('TestA.testa in demo/pkg02/test02.py')

方法3:修改sys.path变量

## pkg01/test01.py
import sys,os
cur_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(cur_dir))
print(sys.path)
from pkg02 import test02
print(test02)
print(test02.args)
test02.fun()
test02.TestA().testa()
## pkg02/test02.py
print('导入demo/pkg02/test02.py')
args = {'a': 100}
def fun():print('func in demo/pkg02/test02.py')
class TestA:def testa(self):print('TestA.testa in demo/pkg02/test02.py')

http://www.lryc.cn/news/571170.html

相关文章:

  • 05_MinIO+Java SpringBoot 实现透传代理下载
  • 如何确定驱动480x320分辨率的显示屏所需的MCU主频
  • 为何前馈3DGS的边界总是“一碰就碎”?PM-Loss用“3D几何先验”来解
  • Mac 安装JD-GUI
  • 低轨导航 | 低轨卫星导航PNT模型,原理,公式,matlab代码
  • 软件工程:流程图如何画?
  • Python 爬虫入门 Day 5 - 使用 XPath 进行网页解析(lxml + XPath)
  • springboot使用kafka
  • Jmeter的三种参数化方式详解
  • web前端开发核心基础:Html结构分析,head,body,不同标签的作用
  • Java内存模型与线程
  • Anaconda 使用
  • 力扣经典算法篇-17-反转字符串中的单词(逆序遍历,数组分割,正则表达式)
  • 4_STM32F103ZET6芯片系统架构和寄存器
  • 通过自适应训练样本选择弥合基于锚点和无锚点检测之间的差距之ATSS论文阅读
  • 【论文阅读】BACKDOOR FEDERATED LEARNING BY POISONING BACKDOOR-CRITICAL LAYERS
  • Matlab自学笔记五十九:符号变量的代入和替代subs精讲
  • Windows10安装WSL Ubuntu
  • 设计模式:单例模式多种方式的不同实现
  • vue中diff算法的原理
  • 把springboot打包为maven可引入的jar
  • Maven 的 settings.xml详解
  • 深度学习中常见的激活函数分析
  • Android Studio Jetpack Compose毛玻璃特效按钮
  • 【数据结构】栈和队列详解
  • 线性放大器设计方案:248-双极性任意波1M带宽400Vpp高压线性放大器
  • 欧拉安装vboxlinuxadditions时,出错
  • 第九章——8天Python从入门到精通【itheima】-95~96-Python的异常模块与包(自定义模块并导入+自定义Python包)
  • MySQL 命令行的核心操作命令详解
  • 资深Java工程师的面试题目(一)微服务