python的import功能,你需要了解的导入机制

1 基本概念

|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 概念 | 解释 |
| import | 即导入,方式就是在import位置将代码文件拷贝过去。 |
| 模块(module) | python中一个.py文件定义为一个模块 常用的几种模块导入方式: import module_name import module_name.function_name import module_name.class_name from module_name import * from module_name import func_name,class_name from module_name import * |
| 包(package) | 指软件包,包含__init__.py、modules、及子目录等 常用的几种导入方式: import package_name import package_name as p import package.module import package.module as pm from package.module import * from package import module1, module2, module3, ... ... from package import * 包的导入和模块导入基本一致,只不过导入包时会先执行包内的__init__.py。如果只是 导入一个包import package而不指定导入任何模块,且包中的__init__.py文件中没有定 义其他的初始化操作,那么包下面的模块是无法被自动导入的。 |
| Import导入时搜索路径 | 装载module代码时python解释器需要先搜索到对应的.py文件,搜索顺序为: 1. 搜索内存中sys.modules中已经加载好的模块 2. 搜索python的内置模块 3. 搜索sys.path路径中的python模块和包 * sys.path:包含了当前脚本的路径 和其他查找包(系统库、第三方库等)的路径,我们也可以在代码中通过sys.path.append()动态添加需要的搜索路径 * PYTHONPATH:查看默认路径,比如Linux下为/usr/local/lib/python/ |

2 举例介绍

为了形象地解释,我建立了一个test文件夹,其中一个文件夹A打算建立成一个软件包,然后尝试在B文件夹的的run.py文件下导入A包中的模块。

1 在A_B.py中 定义__all__用来模糊导入 from moduleA import *

python文件中设置了 all 的值,那么则按照 all 指定的子包或者模块进行加载。

举例:定义A_B.py文件,__all__中增加A_B 和C_D函数,不包含E_F函数

在A目录的__init__.py中通过from A_B import *时,E_F函数并不会被导入,上述执行后会报错

2 配置sys.path, 在B文件夹的的run.py文件下导入A包中的模块。

在run.py中import A,并执行run.py,发现报错如下:

发现在上面的例子中__init__.py文件执行时并为报错,现在在B文件夹执行run.py就会报错找不到A_B模块,那是因为在执行python文件时在本目录下,或者在上面基本概念介绍时的搜索路径中并未找到A_B模块,所以报错。

当我们在run.py中将A目录增加到sys.path中时,执行正常

python 复制代码
import sys
sys.path.append("/Volumes/UNTITLED/test/A")
import A

执行结果:

python 复制代码
开始导入A_B模块
使用A_B函数
使用E_F函数

共勉: 东汉·班固《汉书·枚乘传》:"泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。"

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

相关推荐
yannan2019031317 分钟前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁27 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev28 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
好喜欢吃红柚子42 分钟前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜1 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼1 小时前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~1 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
放飞自我的Coder2 小时前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词