文章目录
- 一、自定义 Python 包
- 1、PyCharm 中创建 Python 包
- 2、自定义 Module 模块代码
- 3、`__init__.py` 代码
- 二、导入并调用自定义 Python 包
- 1、使用 import 导入自定义包模块
- 2、使用 from 导入自定义包模块
- 3、使用 from 导入自定义包模块中的函数功能
- 三、`__init__.py` 定义 `__all__` 变量
一、自定义 Python 包
1、PyCharm 中创建 Python 包
右键点击 PyCharm 中的 Python 工程根目录 , 选择 ” New / Python Package ” 选项 ,
输入 Python 包名称 , 然后点击回车 , 创建 Python 包 ;
创建完成后 , 自动生成了一个 my_package 目录 , 该目录下自动生成了一个 __init__.py
文件 ;
在命令行中 , 使用 tree /f
命令 , 查看 该 Python 工程的目录结构 :
Y:\002_WorkSpace\PycharmProjects\HelloPython>tree /f卷 新加卷 的文件夹 PATH 列表卷序列号为 C893-6821Y:.│hello.py│main.py│├─.idea││.gitignore││HelloPython.iml││misc.xml││modules.xml││workspace.xml│││└─inspectionProfiles│profiles_settings.xml│└─my_package__init__.pyY:\002_WorkSpace\PycharmProjects\HelloPython>
2、自定义 Module 模块代码
右键点击 PyCharm 根目录中的模块包 , 然后选择 ” New / Python File ” 选项 ,
输入文件名 ,
点击回车 , 即可在 Python 包中创建了 模块代码 ;
在 my_module1.py 中实现一个函数 :
"""Python 包模块代码示例"""def my_module1_print():print("my_package 的 my_module1 模块运行")
再次创建一个模块 my_module2.py , 在 my_module2.py 中实现一个函数 :
"""Python 包模块代码示例"""def my_module2_print():print("my_package 的 my_module2 模块运行")
3、__init__.py
代码
__init__.py
源码文件可以空着 , 但是必须要有 , 这是 Python 包的标志 ;
有了 __init__.py
源码文件之后 , 该目录才会被当做包对待 ,
如下图所示 , my_package 目录下有 __init__.py
源码文件 , 其目录图标中间有个点 , 普通的目录是这个样子的 , 如 PyCharm 项目的根目录 HelloPython ;
__init__.py
源码 中可以定义 __all__
变量 , 这是一个列表容器 , 元素类型是字符串 ;
二、导入并调用自定义 Python 包
1、使用 import 导入自定义包模块
导入后 , 可以 通过 包名.模块名.功能名 访问指定功能 ;
代码示例 :
"""自定义 Python 包 代码示例"""import my_package.my_module1import my_package.my_module2my_package.my_module1.my_module1_print()my_package.my_module2.my_module2_print()
执行结果 :
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.pymy_package 的 my_module1 模块运行my_package 的 my_module2 模块运行Process finished with exit code 0
2、使用 from 导入自定义包模块
代码示例 :
"""自定义 Python 包 代码示例"""from my_package import my_module1from my_package import my_module2my_module1.my_module1_print()my_module2.my_module2_print()
执行结果 :
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.pymy_package 的 my_module1 模块运行my_package 的 my_module2 模块运行Process finished with exit code 0
3、使用 from 导入自定义包模块中的函数功能
代码示例 :
"""自定义 Python 包 代码示例"""from my_package.my_module1 import my_module1_printfrom my_package.my_module2 import my_module2_printmy_module1_print()my_module2_print()
执行结果 :
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.pymy_package 的 my_module1 模块运行my_package 的 my_module2 模块运行Process finished with exit code 0
三、__init__.py
定义 __all__
变量
在 __init__.py
中定义 __all__
变量 , 其含义是该软件包中 , my_module1 模块是有效的 , 其它模块不生效 ;
__all__ = ["my_module1"]
使用
from my_package import *
代码 , 导入整个软件包 ,
如下代码中 , 只有 my_module1 模块中的内容是可用的 , my_module2 模块无法被访问 ;
"""自定义 Python 包 代码示例"""from my_package import *my_module1.my_module1_print()my_module2.my_module2_print()
执行结果 :
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.pymy_package 的 my_module1 模块运行Traceback (most recent call last):File "Y:\002_WorkSpace\PycharmProjects\HelloPython\hello.py", line 8, in <module>my_module2.my_module2_print()NameError: name 'my_module2' is not defined. Did you mean: 'my_module1'" />with exit code 1