当前位置: 首页 > article >正文

python 包和模块的导入机制详解!

油管看到一个非常好的视频,在这里对一些视频内的重点内容进行总结。

注:本文主要供自己复习使用,仅提供个人认为的重点内容,难免有不周到之处,如果想要详细地了解相关机制,请在油管搜索:
Python’s Import System - Module object|Regular/Namespace Packages|Finders & Loaders|Relative imports

1.__file__

如果对模块和包的__file__属性分别进行打印,结果如下:

# 包的对应路径为相应的__init__文件
/data4/hyf/project/package/__init__.py
# 模块的对应路径为对应的绝对路径
/data4/hyf/project/tool.py

2.__name__

结果如下:

# 被执行函数的__name__值
__main__
# 被导入的模块的__name__值
tool
# 被导入的包的__name__值
package
# 被导入的包内的模块的__name__值
package.module1

3.包的__init__.py文件

导入包时,该文件被自动执行,该文件的全局变量、函数,可直接通过类似package.variable的方式进行访问。

4.导入包并不自动导入模块

若包的__init__.py文件内不含有import submodule(或是不含有__init__.py),那么是不会自动导入包内的模块的,比如,若某文件中代码如下

import package
print(package.module)

会遇到报错:

AttributeError: module 'package' has no attribute 'module'

想要导入包时,也自动导入其中的模块,需要在包的__init__.py文件中写入以下两行代码中的其中一行,这样就没有之前的报错了:

# 相对导入
from . import module
# 绝对导入
import package.module

或者,也可以直接使用:

import package.module

这样也是可以使用module模块的

5.对第四部分机制的解释

若没有__init__.py文件执行相对/绝对导入命令,package对象就没有指向子模块所在内存的变量,主函数自然就无法通过package找到package内的module

6.相对导入

使用相对导入时,不能超过顶层包的路径去导入其他包或者模块。如,不能在module内使用from .. import xxx,因为module只属于包package,在package之上,module并不属于其他包。

此外,只有在被其他模块导入时,相对导入才能正常工作。在主文件(python直接执行的py文件)中是不能使用相对导入的。

7.使用-m参数执行模块

可以使用python -m package.module的方式直接执行模块。如果package下有名为__main__.py的文件,可以直接执行

python -m package

这等效于

python -m package.__main__

http://www.kler.cn/a/538788.html

相关文章:

  • 数据库高安全—审计追踪:传统审计统一审计
  • SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现
  • 利用 Python 爬虫获取按关键字搜索淘宝商品的完整指南
  • Word中Ctrl+V粘贴报错问题
  • android apk反编译
  • nodejs - vue 视频切片上传,本地正常,线上环境导致磁盘爆满bug
  • LLM(十三)| DeepSeek-R1论文全文翻译
  • 游戏己停止运行:最新修复ntdll.dll的方法
  • 【大模型】Ubuntu下安装ollama,DeepSseek-R1:32b的本地部署和运行
  • 如何避免大语言模型中涉及丢番图方程的问题
  • Pandas使用教程 - 正则表达式在 Pandas 中的应用
  • FlutterWeb实战:02-加载体验优化
  • Elasticsearch的使用场景、数据量级及选择原因?为什么没有用Hbase?
  • 按钮凸起与按下css效果
  • 番外02:前端八股文面试题-CSS篇
  • ZooKeeper作为注册中心有什么问题? ZooKeeper作为注册中心,海量服务同时重启有什么问题?
  • DeepSeek LLM 论文解读:相信长期主义开源理念可扩展大语言模型(DeepSeek 吹响通用人工智能的号角)
  • 使用LLaMA Factory踩坑记录
  • 基于PAI 低代码实现大语言模型微调和部署
  • python中的lambda function(ChatGPT回答)
  • 【算法刷题指南】二分查找
  • 电商java 面试题_JAVA电商项目面试题(一)
  • Windows图形界面(GUI)-QT-C/C++ - QT Dial
  • python连点器
  • 百度的冰桶算法
  • 未来十年的前端走向以及需要掌握什么技能