imp.load_source(moudel,path).get_network()

废柴学习python留档

imp.load_source(moudel,path).get_network()
最近学习大佬代码的时遇到了这样的一段代码:

import os
import imp
def get_network(cfg):
    arch = cfg.network #dla_34?
    heads = cfg.heads
    head_conv = cfg.head_conv
    num_layers = int(arch[arch.find('_') + 1:]) if '_' in arch else 0
    arch = arch[:arch.find('_')] if '_' in arch else arch
    get_model = _network_factory[arch]
    network = get_model(num_layers, heads, head_conv)
    return network
def make_network(cfg):
    module = '.'.join(['lib.networks', cfg.task]) 
    path = os.path.join('lib/networks', cfg.task, '__init__.py') 
    return imp.load_source(module, path).get_network(cfg)

此处get_network(cfg)其实并不是这段代码片中所定义的get_network(cfg)函数(不知道大佬在这里写一个同样名字的函数是为什么,并没有发现被调用,也可能有其他的用途),而是在path指定文件中的get_network函数。
新建一个py文件file1.py

def functiontest():
    print('this is from file1')

再新建一个文件file2.py,用于导入file1.py

import imp
def functiontest():
    print('this is from file2')
out=imp.load_source('test','./file1.py') #'test'是个名字而已,不知道有什么实际作用
out.functiontest()

此外,因为imp 在Python3.3以上版本中被弃用。

DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses 
import imp

解决方案:将其替换为importlib,load_source替换为SourceFileLoader。即:

from importlib.machinery import SourceFileLoader
out=SourceFileLoader('test','./file1.py').load_module()
out.functiontest()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值