关于Python内置函数__import__的问题

Python的内置函数__import__()可以引用包或模块,与import的功能基本相同。
所以,如何用__import__函数实现“from a_module_or_package import *" 这一功能?

像这样写:

__import__(sub_module_name,fromlist = [upper_module_name])

为__import__函数传入两个参数,第一个直接写要引用的模块名称(格式为A.B,要从最上层模块名写起,用句点连接),第二个要指明参数为fromlist,传入要引用的模块的上层模块的名称,同样以A.B的格式自上而下书写。

举个例子:
要引用openpyxl模块的styles模块的colors模块,可以这样写--->

__import__('openpyxl.styles.colors',fromlist=['openpyxl.styles'])

注意⚠️:在引用下层模块时,如果只说明了模块名称,而没有为__import__函数传入fromlist参数,__import__函数引用的会是最上层模块。如下图所示,如果原意是想引用openpyxl.styles.colors模块,但是未传入fromlist参数,那么__import__函数引用的模块就变成了openpyxl模块。

img

__import__它的语法和import语句相似,但是它允许在运行时动态输入模块名称。

module_name = "math"
math = __import__(module_name)

__import()__还可以指定导入模块的某个特定的成员,例如:


module_name = "math"
member_name = "pi"
math_pi = __import__(module_name, fromlist=[member_name])
print(math_pi.pi)
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章:python中import包报错解决方法 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: Python中动态导入对象importlib.import_module()的使用中的 3、使用内敛函数__import__ 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    除了前面两种使用import关键字的方法以外,我们还可以使用内建函数 import() 来导入 module。两者的区别是,import 后面跟的必须是一个类型(type),而__import__() 的参数是一个字符串,这个字符串可能来自配置文件,也可能是某个表达式计算结果。例如
    mymodule = import (’module_name’)
    附注:
    1)模块的内容都放在一个模块文件中,如 mymodule 的内容应该放在PYTHONPATH 目录下的一个mymodule.py中,C实现的除外
    2)包可以将几个模块名称空间组织起来, 如A.b 就表示在包A中的一个子模块b

    #!/bin/env python
    #coding:gbk
    #coding:utf-8
    "利用sys模块导入指定Python文件的路径"
    import sys
    sys.path.append("./")
    "另外一种导入Python文件"
    my = __import__("m")
     
    print my.plus(12,3)
     
    print help(my.plus)
    

    参考资料:
    1、

    http://www.cnblogs.com/allenblogs/archive/2011/11/15/2055149.html
    2、http://blog.csdn.net/chenguolinblog/article/details/11521611



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^