python打卡day30

模块和库的导入
知识点回顾:

  1. 导入官方库的三种手段
  2. 导入自定义库/模块的方式
  3. 导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致)

作业:自己新建几个不同路径文件尝试下如何导入

python的学习就像是学一点常见的基础语法,再去针对性地学习处理任务需要用到的库,库的导入很简单:

  • 标准导入整个库,import xxx
  • 从库中导入特定项,from xxx import yyy
  • 非标准导入整个库,from xxx import *(和上面导入库中特定项一样,用的时候可以不用加库的前缀)

------------------------------------------------- 相关概念辨析一下 ------------------------------------------------------

模块(Module)

  • 本质:以**`.py` 结尾的单个文件**,包含Python代码(函数、类、变量等)
  • 作用:将代码拆分到不同文件中,避免代码冗余,方便复用和维护

**包(Package)**在python里,包就是库

  • 本质:有层次的文件目录结构(即文件夹),用于组织多个模块和子包
  • 核心特征:包的根目录下必须包含一个 `init.py` 文件(可以为空),用于标识该目录是一个包

  • IDE通常会将你打开的项目文件夹设为"根目录"(或者说,运行时的工作目录)。Python 在导入模块时,会从这个根目录(以及其他一些标准位置和脚本所在的目录)开始查找,具体操作中,模块导入可以按目录层级分为以下三种类型:

1.同级目录导入

  • 场景:当前脚本和要导入的模块文件在同一个目录下
  • 方法:直接使用上面提到的三种导入库的方式

project/

├── main.py # 当前脚本

└── utils.py # 要导入的模块

python 复制代码
# main.py 中导入 utils.py
import utils
utils.some_function()

# 或使用 from 语法
from utils import some_function
some_function()

2.子目录导入

  • 场景:要导入的模块位于当前脚本的子目录中
  • 方法:需要将子目录转换为 Python 包,再通过包路径导入

project/

├── main.py

└── subdir/

├── init.py # 空文件,标识这是一个包

└── utils.py # 子目录中的模块

python 复制代码
# main.py 中导入子目录模块
from subdir import utils
utils.some_function()

# 或者只导入相关函数
from subdir.utils import some_function
some_function()

3.跨目录导入

  • 场景:要导入的模块位于完全不同的目录层级(如父目录、兄弟目录等)

  • 方法:需动态修改 sys.path 或使用绝对导入(Python 3.3+ 支持命名空间包)

  • project/

    ├── parent_dir/

    │ └── utils.py

    └── child_dir/

    └── main.py # 需要导入 ../parent_dir/utils.py

python 复制代码
# main.py 中动态添加父目录到 Python 路径
import sys
import os

# 获取父目录路径并添加到 sys.path
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(parent_dir)

# 现在可以导入父目录中的模块
from parent_dir import utils
utils.some_function()

直接在终端运行python -m child_dir.main也可以将父目录路径添加到sys.path

@浙大疏锦行

相关推荐
wuhen_n几秒前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
AIFarmer1 分钟前
在EV3上运行Python语言——无线编程
python·ev3
不会代码的小测试3 分钟前
UI自动化-POM封装
开发语言·python·selenium·自动化
2401_841495645 分钟前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
roman_日积跬步-终至千里9 分钟前
【Java并发】Java 线程池实战:警惕使用CompletableFuture.supplyAsync
java·开发语言·网络
lsx20240614 分钟前
C++ 基本的输入输出
开发语言
ZH154558913115 分钟前
Flutter for OpenHarmony Python学习助手实战:GUI桌面应用开发的实现
python·学习·flutter
B站计算机毕业设计超人21 分钟前
计算机毕业设计Hadoop+Spark+Hive招聘推荐系统 招聘大数据分析 大数据毕业设计(源码+文档+PPT+ 讲解)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
B站计算机毕业设计超人22 分钟前
计算机毕业设计hadoop+spark+hive交通拥堵预测 交通流量预测 智慧城市交通大数据 交通客流量分析(源码+LW文档+PPT+讲解视频)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
CodeSheep程序羊26 分钟前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展