当前位置:   article > 正文

Python | Import 三种导入方式_import引入

import引入

通常大家使用最多的是第一种,当然也有特殊情况下使用第二种和第三中的情况。
在这里插入图片描述
正常我们导入的模块都会存储在sys.modules中,当我们使用任意一种导入方式的时候,系统将自动在sys.modules中调用,如果没有将会在sys.paths中查找是否有对应的包。

1. 普通导入

import module | from module import class,function,property

普通导入使用上述两种方式可以直接导入需要的包、方法、类变量等,使用范围一般为局部命名空间,且导入所返回的module地址为当前导入文件的地址

```python
# -*- coding:utf-8 -*-
import sys
import importlib

def find_import_pkg():
    find_import_modules = list(module_name for module_name in sys.modules.keys() if 'import_study' in module_name)
    print(find_import_modules)
    return find_import_modules

def import_level_test(import_pkg):
    # find_import_pkg()
    exec("import %s" % import_pkg)
    print(eval(import_pkg))
    # find_import_pkg()
    del sys.modules[eval("%s.__name__"%import_pkg)]
    importlib.reload(sys)
    return import_level_test

# import xxx
import_level_test('import_study')
import_level_test('import_study.pkg_level01')
import_level_test('import_study.pkg_level01.pkg_level02')
import_level_test('import_study.pkg_level01.pkg_level02.pkg_level03')
import_level_test('import_study.pkg_level01.pkg_level02.pkg_level03.py_level03')

# from xxx import xxx
from import_study.pkg_level01.pkg_level02.pkg_level03.py_level03 import py_level03_func01
```
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

2. importlib导入

importlib.import_module(name,package)

importlib可以实现绝对路径或者相对路径的包导入,它是一个导入方法,支持自定义包路径导入,其中每一个点(.)代表一层包文件,第一个点表示当前包。且导入所返回的module地址为当前导入文件的地址。

```python
# -*- coding:utf-8 -*-

# importlib.import_module 用法
import importlib

# 绝对路径
print(importlib.import_module('import_study.pkg_level01'))
print(importlib.import_module('import_study.pkg_level01.pkg_level02.pkg_level03'))
print(importlib.import_module('import_study.pkg_level01.pkg_level02.pkg_level03.py_level03'))

# 相对路径 代码里了一个点代表一个level层
print(importlib.import_module('.pkg_level01','import_study'))
print(importlib.import_module('..pkg_level01','import_study.pkg_level01'))
print(importlib.import_module('...pkg_level01','import_study.pkg_level01.pkg_level02'))
print(importlib.import_module('....pkg_level01','import_study.pkg_level01.pkg_level02.pkg_level03'))
print(importlib.import_module('.....pkg_level01','import_study.pkg_level01.pkg_level02.pkg_level03.py_level03'))

# 相对路径 可以再subpkg内部使用相对导入 不用直接从工程顶层包import_study开始 这里模拟一层的情况
print(importlib.import_module('.pkg_level02','pkg_level01'))
print(importlib.import_module('..pkg_level02','pkg_level01.pkg_level02'))


```
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3. __import__导入

__import__(name, globals=None, locals=None, fromlist=[],level=0)

双下import是一个导入方法,常常用在导入后直接进行使用,并且不存储任何导入变量(可以理解用完即释放),导入返回的module地址为第一层包的地址,而不是导入文件的精确地址。

```python
# -*- coding:utf-8 -*-

# __import__(name, globals=None, locals=None, fromlist=()), level=0)
# name: module name
# globals: 导入全局
# locals: 导入局部
# fromlist: 导入的pkg、py、class、function、property
imported_pkg = __import__('import_study.pkg_level01', globals(), locals(), ['pkg_level02'], 0)
print(imported_pkg.pkg_level02.pkg_level03.py_level03.py_level03_func01)

imported_py = __import__('import_study.pkg_level01.pkg_level02.pkg_level03.py_level03', globals(), locals(), ['py_level03_func01'], 0)
print(imported_py.py_level03_func01)

print(__import__('import_study.pkg_level01'))
print(__import__('import_study.pkg_level01.pkg_level02'))
print(__import__('import_study.pkg_level01.pkg_level02.pkg_level03'))
print(__import__('import_study.pkg_level01.pkg_level02.pkg_level03.py_level03'))

```
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/272229
推荐阅读
相关标签
  

闽ICP备14008679号