Python3导入自定义模块的三种方法详解

白榆
白榆
发布时间:2026-10-13| 4人浏览过
原创

本文详细解析Python3中导入自定义模块的三种方式:直接import、利用sys.path动态添加路径以及通过.pth文件配置。文章结合廖雪峰教程基础,针对模块与执行文件同目录或不同目录的场景,提供具体代码示例和操作步骤,帮助开发者解决模块导入失败的问题,提升代码可维护性。

前言

近期学习廖雪峰教程至“模块”章节。若对如何构建自定义模块尚存疑惑,建议先回顾基础概念:

模块概念

随着程序规模扩大,单一文件内的代码量激增,导致维护难度加大。

为提升代码可维护性,通常将函数分组并分散至不同文件。这种组织方式被众多编程语言采用。在Python中,每个.py文件即被视为一个模块(Module)。

使用模块的优势

核心优势在于显著提升代码的可维护性。此外,模块编写完成后即可被其他程序引用,无需从零开始。在开发过程中,我们频繁引用各类模块,涵盖Python内置模块及第三方模块。

使用模块还能有效避免函数名与变量名的冲突。不同模块中允许存在同名函数或变量,因此编写自定义模块时无需过度担忧命名冲突。但仍需注意避免与Python内置函数重名,可查阅Python所有内置函数列表。

若不同开发者编写的模块名相同,Python通过按目录组织模块的方式(即包 Package)来解决冲突。

例如,abc.py文件对应名为abc的模块,xyz.py文件对应名为xyz的模块。

若abc和xyz模块名与其他现有模块冲突,可通过包机制进行组织。具体做法是选定一个顶层包名(如mycompany),并按特定目录结构存放文件:

mycompany ├─ __init__.py ├─ abc.py └─ xyz.py

引入包后,只要顶层包名不冲突,各模块间亦不会冲突。此时,abc.py的完整模块名变为mycompany.abc,同理xyz.py变为mycompany.xyz。

需注意,每个包目录下必须包含__init__.py文件,否则Python会将该目录视为普通目录而非包。__init__.py可为空或包含Python代码,因其本身即为模块,模块名与包名一致(如mycompany)。

类似地,可构建多级目录形成多层级包结构,例如:

mycompany ├─ web │ ├─ __init__.py │ ├─ utils.py │ └─ www.py ├─ __init__.py ├─ abc.py └─ xyz.py

此时,www.py的模块名为mycompany.web.www,而两个utils.py文件的模块名分别为mycompany.utils和mycompany.web.utils。

创建自定义模块时需特别注意命名规范,避免与Python内置模块重名。例如,系统已存在sys模块,则自定义模块不可命名为sys.py,否则将无法导入系统自带的sys模块。

mycompany.web同样是一个模块,请指出该模块对应的.py文件。

小结

模块是Python代码的集合,既可使用其他模块,也可被其他模块调用。

创建自定义模块时需注意:

  • 模块名需遵循Python变量命名规范,避免使用中文或特殊字符;
  • 模块名不得与系统模块名冲突。建议先检查系统是否已存在该模块,方法是在Python交互环境中执行import abc,若成功则表明系统已存在此模块。

模块极大促进了开发效率,许多开源模块共享于此,加速了开发进程。可在以下链接查找众多开源模块:

https://pypi.python.org/pypi

鉴于初学者常遇细节问题,且网络教程往往过于简略,导致操作困难。

特此记录详细操作步骤。

具体实施

第一种方法:直接import

此方法的前提是Python执行文件与模块位于同一目录(即父级目录相同),结构如下:

  • main.py与pwcong模块均位于python目录下
  • 执行文件为main.py
  • pwcong文件夹作为模块

将pwcong模块提供的函数写入__init__.py中,该文件仅包含一个hi函数:

# pwcong 模块的 __init__.py
# -*- coding: utf-8 -*-
def hi():
 print("hi")

执行文件main.py直接导入模块:

# main.py
# -*- coding: utf-8 -*-
import pwcong
pwcong.hi()

运行main.py后,命令行窗口输出“hi”,第一种方式成功。

使用方式为:先导入模块,随后通过模块名.变量|函数调用,如示例中的pwcong.hi()。

第二种方法:通过sys模块导入自定义模块路径

若执行文件与模块不在同一目录,直接import将无法找到自定义模块。结构如下:

  • 执行文件main.py位于main目录下
  • pwcong模块位于python目录下

sys模块为Python内置模块,导入自定义模块的步骤如下:

  1. 首先导入sys模块
  2. 随后通过sys.path.append(path) 函数添加自定义模块所在目录
  3. 最后导入自定义模块。

此时main.py的代码如下:

# main.py
# -*- coding: utf-8 -*-
import sys
sys.path.append(r"C:\Users\Pwcong\Desktop\python")
import pwcong
pwcong.hi()

执行main.py文件,最终输出“hi”,第二种方式成功。

第三种方法:通过.pth文件定位自定义模块

该方法利用系统变量原理,Python会扫描path变量路径以导入模块。虽可直接在系统path中添加,但推荐使用.pth文件方式。

模块与执行文件的目录结构同上:

  • 执行文件main.py位于main目录下
  • pwcong模块位于python目录下

创建一个module_pwcong.pth文件,内容即为pwcong模块所在目录:

C:\Users\Pwcong\Desktop\python

将该module_pwcong.pth文件放置于:

Python安装目录\Python35\Lib\site-packages

例如我的路径为:

随后main.py导入并使用自定义模块:

# -*- coding: utf-8 -*-
import pwcong
pwcong.hi()

执行main.py文件,可输出“hi”,第三种方式成功。

结语

至此,三种导入自定义模块的示例已完成,内容力求详尽。

以上为本文全部内容,希望能为您的学习或工作提供参考。如有疑问欢迎留言交流,感谢支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。