前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】Python 包 ② ( 自定义 Python 包 | 导入并调用自定义 Python 包 | `__init__.py` 定义 `__all__` 变量 )

【Python】Python 包 ② ( 自定义 Python 包 | 导入并调用自定义 Python 包 | `__init__.py` 定义 `__all__` 变量 )

作者头像
韩曙亮
发布2023-10-11 19:16:01
4110
发布2023-10-11 19:16:01
举报
文章被收录于专栏:韩曙亮的移动开发专栏

一、自定义 Python 包

1、PyCharm 中创建 Python 包

右键点击 PyCharm 中的 Python 工程根目录 , 选择 " New / Python Package " 选项 ,

输入 Python 包名称 , 然后点击回车 , 创建 Python 包 ;

创建完成后 , 自动生成了一个 my_package 目录 , 该目录下自动生成了一个 __init__.py 文件 ;

在命令行中 , 使用 tree /f 命令 , 查看 该 Python 工程的目录结构 :

代码语言:javascript
复制
Y:\002_WorkSpace\PycharmProjects\HelloPython>tree /f
卷 新加卷 的文件夹 PATH 列表
卷序列号为 C893-6821
Y:.
│  hello.py
│  main.py
│
├─.idea
│  │  .gitignore
│  │  HelloPython.iml
│  │  misc.xml
│  │  modules.xml
│  │  workspace.xml
│  │
│  └─inspectionProfiles
│          profiles_settings.xml
│
└─my_package
        __init__.py


Y:\002_WorkSpace\PycharmProjects\HelloPython>

2、自定义 Module 模块代码

右键点击 PyCharm 根目录中的模块包 , 然后选择 " New / Python File " 选项 ,

输入文件名 ,

点击回车 , 即可在 Python 包中创建了 模块代码 ;

在 my_module1.py 中实现一个函数 :

代码语言:javascript
复制
"""
Python 包模块代码示例
"""


def my_module1_print():
    print("my_package 的 my_module1 模块运行")

再次创建一个模块 my_module2.py , 在 my_module2.py 中实现一个函数 :

代码语言:javascript
复制
"""
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 导入自定义包模块

导入后 , 可以 通过 包名.模块名.功能名 访问指定功能 ;

代码示例 :

代码语言:javascript
复制
"""
自定义 Python 包 代码示例
"""

import my_package.my_module1
import my_package.my_module2

my_package.my_module1.my_module1_print()
my_package.my_module2.my_module2_print()

执行结果 :

代码语言:javascript
复制
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
my_package 的 my_module1 模块运行
my_package 的 my_module2 模块运行

Process finished with exit code 0

2、使用 from 导入自定义包模块

代码示例 :

代码语言:javascript
复制
"""
自定义 Python 包 代码示例
"""

from my_package import my_module1
from my_package import my_module2

my_module1.my_module1_print()
my_module2.my_module2_print()

执行结果 :

代码语言:javascript
复制
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
my_package 的 my_module1 模块运行
my_package 的 my_module2 模块运行

Process finished with exit code 0

3、使用 from 导入自定义包模块中的函数功能

代码示例 :

代码语言:javascript
复制
"""
自定义 Python 包 代码示例
"""

from my_package.my_module1 import my_module1_print
from my_package.my_module2 import my_module2_print

my_module1_print()
my_module2_print()

执行结果 :

代码语言:javascript
复制
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
my_package 的 my_module1 模块运行
my_package 的 my_module2 模块运行

Process finished with exit code 0

三、__init__.py 定义 __all__ 变量


__init__.py 中定义 __all__ 变量 , 其含义是该软件包中 , my_module1 模块是有效的 , 其它模块不生效 ;

代码语言:javascript
复制
__all__ = ["my_module1"]

使用

代码语言:javascript
复制
from my_package import *

代码 , 导入整个软件包 ,

如下代码中 , 只有 my_module1 模块中的内容是可用的 , my_module2 模块无法被访问 ;

代码语言:javascript
复制
"""
自定义 Python 包 代码示例
"""

from my_package import *

my_module1.my_module1_print()
my_module2.my_module2_print()

执行结果 :

代码语言:javascript
复制
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
my_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'?

Process finished with exit code 1
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、自定义 Python 包
    • 1、PyCharm 中创建 Python 包
      • 2、自定义 Module 模块代码
        • 3、__init__.py 代码
        • 二、导入并调用自定义 Python 包
          • 1、使用 import 导入自定义包模块
            • 2、使用 from 导入自定义包模块
              • 3、使用 from 导入自定义包模块中的函数功能
              • 三、__init__.py 定义 __all__ 变量
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档