Python3导入自定义模块的三种方法详解
本文详细解析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内置模块,导入自定义模块的步骤如下:
- 首先导入sys模块
- 随后通过
sys.path.append(path)函数添加自定义模块所在目录 - 最后导入自定义模块。
此时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”,第三种方式成功。
结语
至此,三种导入自定义模块的示例已完成,内容力求详尽。
以上为本文全部内容,希望能为您的学习或工作提供参考。如有疑问欢迎留言交流,感谢支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









