077-模块-06-模块搜索顺序_哔哩哔哩_bilibili

080-包-01-包的概念以及建立包的方式_哔哩哔哩_bilibili

088-文件操作-01-文件操作套路以及Python中的对应函数和方法_哔哩哔哩_bilibili

注:

1.import math和 from math import *区别

2.

模块(Module)

- **本质**:以 `.py` 结尾的**单个文件**,包含Python代码(函数、类、变量等)。

- **作用**:将代码拆分到不同文件中,避免代码冗余,方便复用和维护。

包(Package)

在python里,包就是库

- **本质**:**有层次的文件目录结构**(即文件夹),用于组织多个模块和子包。

- **核心特征**:包的根目录下必须包含一个 `__init__.py` 文件(可以为空),用于标识该目录是一个包。

都可以通过import进行调用

3.学会查看库、函数的官方文档了解其用法、细节

python main.py就是让运行main.py时,能让里面的包、模块成功导入

4.导入自定义库 / 模块的常见方式

Python 导入自定义模块(如自己编写的 .py 文件或包),需根据模块的位置关系使用需求选择语法,核心有以下 4 类:

(1)直接导入整个模块

适合需要调用模块内多个函数 / 类的场景,调用时需加「模块名。对象名」前缀。

示例(假设 circle.py 含 calculate_area 和 calculate_circumference 两个函数):

# main.py
import circle  # 导入整个 circle 模块radius = 5
area = circle.calculate_area(radius)       # 通过「模块名.函数名」调用
circum = circle.calculate_circumference(radius)
print(area, circum)
(2)从模块导入 “指定对象”

适合仅需模块内部分函数 / 类的场景,调用时无需加模块名前缀,更简洁。

# main.py
from circle import calculate_area  # 只导入 calculate_area 函数radius = 5
area = calculate_area(radius)  # 直接调用函数,无需写 circle.
print(area)

也可一次性导入多个对象(用逗号分隔):

from circle import calculate_area, calculate_circumference
(3)导入模块并 “起别名”

用于简化长模块名解决命名冲突(比如模块名与变量 / 其他模块重名)。

示例(模块名过长时):

import my_very_long_module_name as mvlm  # 给模块起别名 mvlm
mvlm.some_function()  # 等价于 my_very_long_module_name.some_function()

也可给导入的对象起别名

from circle import calculate_area as calc_area
area = calc_area(5)
(4)导入 “包” 中的模块(包是含 __init__.py 的文件夹)

复杂项目中,模块常放在 “包”(带 __init__.py 的文件夹)里,需指定 “包路径” 导入。

假设目录结构:

project/
├── main.py
└── utils/├── __init__.py  # 空文件,标记 utils 是“包”└── geometry.py  # 含 calculate_area 函数

导入方式:

# 方式1:导入包内的模块,再调用模块内对象
from utils import geometry
area = geometry.calculate_area(5)# 方式2:直接导入包内模块的对象
from utils.geometry import calculate_area
area = calculate_area(5)

5.导入库 / 模块的核心逻辑:Python 的 “模块查找路径”(与根目录、解释器 / 终端目录的关系)

Python 导入模块时,不是随机搜索,而是严格按照「预定义的路径列表」查找 —— 这个列表存于 sys.path 中。理解 sys.path,就能明白 “根目录、解释器目录、终端目录” 如何影响导入。

(1)sys.path 是什么?

sys.path 是一个列表,存储着 Python 解释器会搜索模块的所有目录路径。执行 import xxx 时,解释器会依次遍历 sys.path 里的每个目录,寻找名为 xxx.py(或包 xxx/)的模块。

可通过代码打印 sys.path 查看路径:

import sys
print(sys.path)

输出大致包含以下几类路径(不同环境略有差异):

["终端运行脚本时的“当前目录”",  # 关键!终端所在目录会被优先加入"Python 解释器的内置库目录",     # 如 .../python3.10/lib(存放 os、sys 等内置模块)"第三方库安装目录",             # 如 .../site-packages(存放 pandas、numpy 等第三方库)...
]
(2)“终端的目录” 如何影响导入?

当你在终端中运行 python main.py 时,Python 会自动把 “终端当前所在的目录” 加入 sys.path 的最前面。这就是为什么 “终端需要 cd 到项目根目录再运行脚本”—— 这样项目根目录下的自定义模块(如 circle.py)才能被找到。

举个例子:

  • 终端当前目录是 /home/user/project/(项目根目录,含 main.py 和 circle.py);
  • 运行 python main.py,Python 会把 /home/user/project/ 加入 sys.path
  • 当 main.py 执行 import circle 时,解释器会在 sys.path[0](即 /home/user/project/)中找到 circle.py,成功导入。
(3)“解释器的目录” 有什么用?

Python 解释器的安装目录(如 /usr/local/bin/python3 所在层级)中,包含 Python 内置库(如 os.pysys.py)和 标准库(如 math.pydatetime.py)。这些目录会被加入 sys.path,因此你能直接 import math—— 解释器会自动去自身的库目录中查找。

(4)“项目根目录” 的角色(IDE 中的根目录设置)

IDE(如 VSCode、PyCharm)里的 “项目根目录”,本质是模拟 “终端 cd 到根目录运行脚本” 的效果

  • IDE 运行脚本时,会自动把 “项目根目录” 加入 sys.path
  • 这样,你在代码中导入根目录下的模块(如 from utils import xxx),就和 “终端在根目录运行” 的效果一致,避免因 “开发时路径错误” 导致导入失败。
(5)核心逻辑总结:导入 = “在 sys.path 列表的目录里,找对应模块文件”

无论导入自定义模块、第三方库还是内置库,Python 都遵循以下流程:

  1. 将需要的 “搜索目录”(终端当前目录、解释器库目录、第三方库目录等)加入 sys.path
  2. 遍历 sys.path 里的每个目录,检查是否存在要导入的模块(.py 文件或包文件夹);
  3. 找到则导入,找不到则报 ModuleNotFoundError

示例:“终端目录不对导致导入失败”

假设目录结构:

project/
├── main.py
└── circle.py

main.py 中含 import circle

  • 情况 1:终端 cd 到 project/,运行 python main.py → 成功(project/ 在 sys.path 中,能找到 circle.py)。
  • 情况 2:终端在 project/ 的父目录(如 /home/user/),直接运行 python project/main.py → 失败(此时 sys.path 的 “当前目录” 是 /home/user/,不含 circle.py,会报 ModuleNotFoundError)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/96030.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/96030.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/96030.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker Compose 多种安装方式 (Alibaba Cloud Linux 3 环境)

Docker Compose 多种安装方式,适用于不同场景(如依赖系统包管理器、使用 Python 工具链、集成 Docker 插件等)。以下是常见的方案,尤其针对 Alibaba Cloud Linux 3 环境适配: 一、二进制包安装(推荐&#…

Dubbo3序列化安全机制导致的一次生产故障

前言 记录一次 Dubbo 线上故障排查和原因分析。 线上 Dubbo 消费者启动有错误日志如下,但是不影响服务启动。 java.lang.TypeNotPresentException: Type org.example.model.ThirdParam not present ... Caused by: java.lang.ClassNotFoundException: org.example.m…

centos7 docker离线安装

介绍 本文主要讲了如何在完全没网的情况下安装docker(适合于高网络安全要求的企业) 本文适用的centos版本: [root0001 temp]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 采用docker in docker下载依赖 实际试验后&…

东京本社招聘 | 财务负责人 多个日本IT岗位(Java/C++/Python/AWS 等),IT营业同步招募

大家好,本期为大家带来我司在东京GSD本社及其他会社千叶地区的招聘岗位。 涵盖 财务负责人、Java开发工程师、数据中心维护工程师、项目经理、IT营业 等多个职位。 欢迎有志之士加入!🔹 财务负责人(東京本社)工作内容日…

四数之和

目录 一:题目链接 二:题目思路 三:代码实现 一:题目链接 理解题目需要注意,如果两个四元组元素一一对应,则认为两个四元组重复,选择其中一个四元组即可。比如 [ 0 , 1 , 0 , 2] 和 [ 1 , …

【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架

Spring Cloud Task作为微服务架构中的轻量级任务调度框架,为开发人员提供了一种构建短生命周期微服务任务的便捷方式。它允许开发者快速创建、执行和管理一次性任务或短期批处理作业,任务执行完成后自动关闭以释放系统资源,避免了传统长期运行…

【1分钟速通】 HTML快速入门

HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09; 是构建网页的基础语言。它通过 标签&#xff08;Tag&#xff09; 来描述网页的结构和内容&#xff0c;常与 CSS&#xff08;负责样式 – <style></style>&#xff09;和 JavaScr…

【GeoServer】WMS GetFeatureInfo URL 逐个参数解释

我来把你构造的这个 WMS GetFeatureInfo URL 逐个参数解释一下&#xff0c;方便你理解&#xff1a;http://127.0.0.1:8090/geoserver/xxxx/wms? SERVICEWMS& VERSION1.1.1& REQUESTGetFeatureInfo& QUERY_LAYERSloess:yourLayer& LAYERSloess:yourLayer& …

OBS直播教程:点歌直播间怎么弄?直播点歌用什么软件?

OBS直播教程&#xff1a;点歌直播间怎么弄&#xff1f;直播点歌用什么软件&#xff1f; 第一步&#xff1a;安装OBS直播软件&#xff0c;如果你电脑已经安装了OBS&#xff0c;请直接看第二步 OBS直播软件下载地址①&#xff1a; https://d.obscj.com/obs-Studio-29.1.3-Full-…

【数据库】Redis详解:内存数据库与缓存之王

什么是Redis&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、基于内存的数据结构存储系统&#xff0c;可以用作数据库、缓存和消息代理。它支持多种数据结构&#xff0c;如字符串、哈希、列表、集合、有序集合等&#xff0c;具有极高的性能和…

【iOS】 单例模式

1. 认识单例模式首先让我们先看下关于单例模式的定义&#xff08;来自于《设计模式》(Addison-Wesley,1994)&#xff09;一个类有且仅有一个实例&#xff0c;并且自行实例化向整个系统提供。如果说每一个人都是一个类&#xff0c;那么从他出生开始&#xff0c;他就是生活中的唯…

多目标轮廓匹配

前面我们使用模板匹配&#xff0c;得到的结果都是一个图&#xff0c;那么如果我们图片中有许多我们的目标&#xff0c;那么该如何找出来呢&#xff1f;如上我们图片中有许多箭头和我们的模板一致&#xff0c;只不过方向不对&#xff0c;那么该如何匹配呢&#xff1f;图片和模板…

【C++】简单介绍lambda表达式

各位大佬好&#xff0c;我是落羽&#xff01;一个坚持不断学习进步的学生。 如果您觉得我的文章还不错&#xff0c;欢迎多多互三分享交流&#xff0c;一起学习进步&#xff01; 也欢迎关注我的blog主页: 落羽的落羽 文章目录一、 什么是lambda表达式二、 表达式语法三、lambd…

磁共振成像原理(理论)4:自由进动和弛豫 (Free Precession and Relaxation)

当磁化自旋系统被射频脉冲扰动而偏离其热平衡态后&#xff0c;一旦移除外部激励并给予足够时间&#xff0c;系统将根据热力学定律返回平衡态。这一过程包含三个特征现象&#xff1a; (a) 自由进动——宏观磁化矢量 (M⃗\vec{M}M) 绕( B0⃗\vec {B_0}B0​​ )场的进动&#xff1…

ubuntu 20.04 安装spark

安装openjdk21 下载 wget https://download.java.net/openjdk/jdk21/ri/openjdk-2135_linux-x64_bin.tar.gz解压 tar -xvf openjdk-2135_linux-x64_bin.tar.gzsudo mv jdk-21/ /opt/jdk-21/设置环境变量 echo export JAVA_HOME/opt/jdk-21 | sudo tee /etc/profile.d/java2…

第三方区块链应用测评:【多签钱包合约安全评估_阈值签名机制与私钥存储安全性测试】

阈值签名机制安全测试密码学审计 采用门限签名方案&#xff08;TSS&#xff09;的多签钱包需验证其阈值BLS签名或ECDSA签名算法的正确性。测试重点包括&#xff1a;分布式密钥生成&#xff08;DKG&#xff09;过程的保密性&#xff08;无密钥信息泄露&#xff09;、签名碎片验证…

大模型处理长文档的挑战和解决方案?

当前&#xff0c;AI 应用正处于极速发展阶段&#xff0c;大语言模型&#xff08;LLM&#xff09;与检索增强生成&#xff08;RAG&#xff09;系统已成为构建智能问答、知识管理等高阶 AI 应用的核心引擎&#xff0c;被广泛应用于金融分析、学术研究、企业合规等多个领域。然而&…

JavaWeb--day1--HTMLCSS

(以下内容全部来自上述课程及课件) web开发介绍 1. 什么是web&#xff1f; Web&#xff1a;全球广域网&#xff0c;也称为万维网&#xff0c;能够通过浏览器访问的网站。 2. Web网站的工作流程 3. Web标准 Web标准也称为网页标准&#xff0c;由一系列的标准组成&#xf…

OpenEuler安装gitlab,部署gitlab-runner

目录 一、安装gitlab 二、安装部署docker设置源 三、下载部署runner ​编辑 四、构建CI/CD 一、安装gitlab 1.查看OpenEuler版本 [rootlocalhost ~]# cat /etc/os-release NAME"openEuler" VERSION"24.03 (LTS-SP1)" ID"openEuler" VERSI…

实战项目-----在图片 hua.png 中,用红色画出花的外部轮廓,用绿色画出其简化轮廓(ε=周长×0.005),并在同一窗口显示

实战项目实现以下功能&#xff1a;对图片 hua.png 进行轮廓提取&#xff0c;并在同一窗口中完成以下两个绘制操作&#xff1a;用红色画出花的外部轮廓&#xff08;即最外层轮廓&#xff09;用绿色画出该轮廓的近似多边形&#xff0c;其中近似精度参数 ε 设置为轮廓周长的 0.00…