动态加载python模块 | 阿小信的博客
阿小信大人的头像
Talk is cheap. Show me the code. Linus Torvalds

动态加载python模块2014-09-02 04:44

方法一:

>>> the_sys = __import__('sys')
>>> the_sys
<module 'sys' (built-in)>
>>>

方法二:

使用imp模块,文档:http://docs.python.org/2/library/imp.html

:::python 
In [1]: import imp


In [2]: imp.
imp.C_BUILTIN imp.SEARCH_ERROR imp.load_compiled
imp.C_EXTENSION imp.acquire_lock imp.load_dynamic
imp.IMP_HOOK imp.find_module imp.load_module
imp.NullImporter imp.get_frozen_object imp.load_package
imp.PKG_DIRECTORY imp.get_magic imp.load_source
imp.PY_CODERESOURCE imp.get_suffixes imp.lock_held
imp.PY_COMPILED imp.init_builtin imp.new_module
imp.PY_FROZEN imp.init_frozen imp.release_lock
imp.PY_RESOURCE imp.is_builtin imp.reload
imp.PY_SOURCE imp.is_frozen


In [3]: imp??
Type: module
Base Class: <type 'module'>
String Form:<module 'imp' (built-in)>
Namespace: Interactive
Docstring:
This module provides the components needed to build your own
__import__ function. Undocumented functions are obsolete.

find_module应该是先find当前目录

In [4]: imp.find_module('test')
Out[4]: 
(<open file 'test.pyc', mode 'rb' at 0xb604b860>,
'test.pyc',
('.pyc', 'rb', 2))

当前目录没有找到就找path里面的

In [6]: imp.find_module('test')
Out[6]: (None, '/usr/lib/python2.7/test', ('', '', 5))

可以加上第二个参数指定模块路径

In [7]: imp.find_module('test', ['/home/ashin/test/'])
Out[7]: 
(<open file '/home/ashin/test/test.pyc', mode 'rb' at 0xb604b8b8>,
'/home/ashin/test/test.pyc',
('.pyc', 'rb', 2))

它返回三个元素的元组,第一个是file对象,第二个是该文件对象所在的路径,第三个是get_suffixes()返回的desc

In [8]: imp.get_suffixes()
Out[8]: [('.so', 'rb', 3), ('module.so', 'rb', 3), ('.py', 'U', 1), ('.pyc', 'rb', 2)]


In [9]: a=imp.find_module('sys')
In [10]: imp.load_module('sys', *a)
<module 'sys' (built-in)>

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#  
分享到:
阅读[5134] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

网友54.*.*.22[火星]2018-08-21 08:26
网友220.*.*.122[北京]2018-08-21 08:22
网友46.*.*.82[火星]2018-08-21 08:17
网友46.*.*.81[火星]2018-08-21 08:14

发表评论