0

0

Python模块与包管理教程_import机制与项目组织

冷炫風刃

冷炫風刃

发布时间:2026-01-11 17:36:09

|

863人浏览过

|

来源于php中文网

原创

Python import 是动态加载模块、构建命名空间、处理依赖的过程;模块是.py文件,包是含__init__.py的目录;需合理组织项目结构(如src布局)、避免循环导入、用python -m运行确保路径正确。

python模块与包管理教程_import机制与项目组织

Python 的 import 机制不是简单的“把代码复制进来”,而是动态加载模块对象、构建命名空间、处理依赖关系的过程。理解它,才能合理组织项目、避免循环导入、正确发布包、调试导入错误。

模块(.py 文件)是 import 的基本单位

每个 .py 文件默认就是一个模块,文件名(不含 .py)即模块名。import 时 Python 会按 sys.path 列表顺序查找该名字对应的文件:

  • 先查内置模块(如 sys、json),命中则直接加载
  • 再依次检查 sys.path 中的目录:脚本所在目录、PYTHONPATH 路径、标准库路径、site-packages 等
  • 找到 xxx.py 就编译为字节码(.pyc),执行其顶层代码,生成 module 对象并缓存到 sys.modules

注意:重复 import 同一模块不会重新执行,而是直接返回缓存对象——这是实现单例和避免重复初始化的关键。

包(含 __init__.py 的目录)支持层级导入

一个普通目录只要包含空文件 __init__.py(Python 3.3+ 可省略,但显式保留更清晰),就成为包。包允许用点号分隔的层级结构,比如 from mypackage.submodule import func

立即学习Python免费学习笔记(深入)”;

启山智软物流配送系统
启山智软物流配送系统

启山智软物流配送是基于Spring Cloud 和 Vue.js的JAVA物流配送系统。包含总控制后台 、城市合伙人(商家pc端)、 区域团长后台 、用户端小程序 、手机H5等多个操作模块。为响应用户需求我们新增了后台自定义装修组件模块,使页面更加美观,操作更加灵活简便。淘宝商品CSV一键导入,提升用户使用感。还有与众不同的管理台侧边栏设计,打破传统管理台样式。 另有公众号接龙、引导页上传、区域团

下载
  • __init__.py 可为空,也可定义 __all__ 控制 from package import * 导入的内容
  • 包内模块可通过相对导入(from . import modulefrom ..utils import helper),但仅限在包内模块中使用,且必须以模块方式运行(不能直接 python submodule.py)
  • 绝对导入更推荐:from mypackage.utils import log,清晰、可预测、易重构

项目结构要兼顾可运行性与可安装性

常见错误是把脚本和模块混放,导致导入失败或无法 pip install。推荐结构:

myproject/
├── pyproject.toml          # 定义构建系统、依赖、元数据(现代标准)
├── src/
│   └── mypackage/           # 实际代码放 src 下,避免本地开发时意外 import 当前目录
│       ├── __init__.py
│       ├── core.py
│       └── utils/
│           ├── __init__.py
│           └── helpers.py
├── tests/
│   └── test_core.py
└── scripts/
    └── run_app.py           # 入口脚本,通过 -m 方式调用:python -m mypackage.core

关键点:

  • src 目录隔离源码,配合 pyproject.toml 中的 packages = [{include = "mypackage", from = "src"}],确保 pip install 正确打包
  • 入口脚本不直接 import 同级模块,而是用 python -m mypackage.main,让 Python 把 src 加入 sys.path
  • 测试文件应能独立发现和运行,pytest 默认支持从项目根运行,自动识别 src 下的包

常见导入问题与排查方法

遇到 ImportError 或 ModuleNotFoundError,别急着改 sys.path:

  • 运行 python -v -c "import mypackage" 查看详细导入路径和失败点
  • 检查当前工作目录是否影响了 sys.path(尤其 IDE 中默认工作目录可能不是项目根)
  • 确认 __init__.py 存在且未报语法错误(它被导入时也会执行)
  • 循环导入典型表现:A.py 导入 B,B.py 导入 A,且都在顶层执行语句。解法是延迟导入(函数内 import)或重构依赖
  • 虚拟环境未激活或 pip install -e . 没运行,会导致本地修改不生效

掌握 import 的实际行为,比死记语法更重要。它决定了你的代码能否被他人复用、能否在不同环境中稳定运行。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

745

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

634

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

757

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1260

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

577

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

705

2023.08.11

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

80

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号