您的位置:首页 > 编程语言 > Python开发

Python 动态引入模块

2014-11-01 19:26 162 查看
[xluren@test import_test]$ ll
total 8
-rw-rw-r--. 1 xluren xluren 79 Nov  1 19:19 bar.py
-rw-rw-r--. 1 xluren xluren 57 Nov  1 19:18 foo.py
[xluren@test import_test]$ python bar.py
0
1
2
3
4
5
6
7
8
9
[xluren@test import_test]$ cat bar.py
module_name="foo"
plug_module=__import__(module_name)

plug_module.print_foo()
[xluren@test import_test]$ cat foo.py
def print_foo():
for i in range(10):
print i
[xluren@test import_test]$
As mentioned the imp module provides you loadingfunctions.imp.load_source(path)imp.load_compiled(path)I've used these before to perform something similar.In my case I defined a specific class with defined methods that were required. So, once I loaded the module I would check if the class was in the module, and then create an instance of that class.Something like this:
import imp
import os

def load_from_file(filepath):
class_inst = None
expected_class = 'MyClass'

mod_name,file_ext = os.path.splitext(os.path.split(filepath)[-1])

if file_ext.lower() == '.py':
py_mod = imp.load_source(mod_name, filepath)

elif file_ext.lower() == '.pyc':
py_mod = imp.load_compiled(mod_name, filepath)

if hasattr(py_mod, expected_class):
class_inst = getattr(py_mod, expected_class)()

return class_inst

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python