python 动态导包

本文深入解析Python包的概念,包括其目录结构与组成,并详细介绍基本的模块导入方法如import和from...import语法,以及动态导入模块的方式如__import__和importlib模块的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • python 包简介
  • 基本导包/模块 import
  • 动态导包/模块 __import__   importlib

1. python 包简介

  • 包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
  • 简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。
  • Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句

2. 基本导包/模块 import

import 用于导入所需包/模块

import package #导包 

import module #导模块

form package import module #从包中导模块

from module import * #从模块中导入所有内容

还有其他的import方式:

import os, sys, time

from os import *

from os import path, walk, unlink

from os import uname, remove

from os import (path, walk, unlink, uname, 
                remove, rename)

from os import path, walk, unlink, uname, \
                remove, rename

更细节 import 参考:http://codingpy.com/article/python-import-101/

3. 动态导包/模块 __import__   importlib

__import__:系统函数__import__() 

__import__ (name[, globals[, locals[, fromlist[, level]]]])
  • name (required): 被加载 module 的名称
  • globals (optional): 包含全局变量的字典,该选项很少使用,采用默认值 global()
  • locals (optional): 包含局部变量的字典,内部标准实现未用到该变量,采用默认值 local()
  • fromlist (Optional): 被导入的 submodule 名称
  • level (Optional): 导入路径选项,默认为 -1,表示同时支持 absolute import 和 relative import
os = __import__('os')
# 相当于 import os
# import 导入本质上是调用 __import__ 加载
import foo

# 最终调用如下函数实现

# foo = __import__('foo', globals(), locals(), [], -1)

importlib:Python标准库中提供了importlib模块,目的是提供import语句(还有import())的底层实现,另外,importlib让程序员可以在导入过程中创建自己的对象。

imoprt importlib
#导入foo.py模块
foo = importlib.import_module('foo')
foo.main()

importlib详细参考:https://hatboy.github.io/2017/12/21/Python-importlib%E8%AE%B2%E8%A7%A3/

转载于:https://www.cnblogs.com/yelao/p/11002465.html

<think>我们正在讨论Python中如何入模块和。根据用户的问题,我们需要解释如何入模块和括基本语法和注意事项。根据引用[1]和[2],我们知道:-模块是一个.py文件,可以通过import语句入。-是一个含__init__.py文件的目录,该目录下可以有多个模块和子。同时,引用[3]提到了相对入的概念。回答结构:1.入模块的几种方式2.的几种方式3.相对入和绝对入4.注意事项(例如__init__.py的作用,结构等)注意:所有代码示例中,行内代码用$...$,独立代码块用```...```。另外,根据要求,在回答末尾生成相关问题。</think>### Python 模块与入指南 在 Python入模块和是组织代码的基础操作,以下是详细方法: #### 1. **模块入** 模块是单个 `.py` 文件,含变量、函数和类: ```python # 入整个模块 import math print(math.sqrt(16)) # 输出: 4.0 # 入特定对象 from datetime import datetime print(datetime.now()) # 输出当前时间 # 入所有对象 (不推荐) from random import * print(randint(1,10)) ``` 关键点: - 首次入时会执行模块内所有代码 - 模块搜索路径括:当前目录、PYTHONPATH、标准库路径[^1] #### 2. **入** 含 `__init__.py` 文件的目录,用于组织相关模块: ```python # 目录结构 my_package/ ├── __init__.py ├── module_a.py └── subpackage/ ├── __init__.py └── module_b.py # 中的模块 from my_package import module_a from my_package.subpackage import module_b ``` `__init__.py` 的作用: - 标识目录为 Python - 可初始化代码 - 控制 `from package import *` 的行为[^2] #### 3. **入方式对比** | 入方式 | 语法示例 | 适用场景 | |-------------------------|-----------------------------------|-----------------------| | 绝对入 | `from pkg.sub import mod` | 标准推荐方式 | | 相对入 (内部使用) | `from . import sibling_module` | 内模块相互引用[^3] | | 别名入 | `import numpy as np` | 简化长模块名 | #### 4. **常见问题解决** - **循环入**:重构代码或使用局部入 - **入路径问题**: ```python import sys sys.path.append("/custom/path") # 添加自定义搜索路径 ``` - **识别失败**:确保目录含 `__init__.py` (Python 3.3+ 可省略,但显式声明更佳)[^2] > **最佳实践**:优先使用绝对入,保持入语句在文件顶部,避免通配符入(`import *`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值