import 包名或模块名
在Python中导入包或模块是使用模块化编程的核心技能。以下是导入包的常用方法及注意事项:
一、基础导入方式
-
直接导入整个包 使用
import
语句导入整个包,后续访问模块时需加包名前缀。 ```python import mypackage mypackage.module_name.function_name() -
导入包中的特定模块或函数
使用from...import
语句导入指定模块或函数,并为其指定别名(可选)。 ```python from mypackage import module_name或者
from mypackage.module_name import function_name
使用别名
from mypackage import module_name as alias
-
导入模块中的特定成员 通过
from module_name import class_name, function_name
直接访问成员,避免使用包名前缀。 ```python from math import sqrt, pi print(sqrt(16)) # 输出 4.0 print(pi) # 输出 3.14159...
二、包结构与__init__.py
文件
-
包结构示例
mypackage/ __init__.py module1.py module2.py
-
控制导入行为 通过
__init__.py
中的__all__
变量,可以指定使用from package import *
时需要导入的模块。 ```pythonmypackage/init.py
all = ['module1', 'module3']
使用 * 导入时,仅导入 module1 和 module3
from mypackage import *
访问 module2 会报错
三、注意事项
-
相对导入与绝对导入
-
绝对导入 :使用完整路径,如
from mypackage.module1 import function
-
相对导入 :在包内部使用
from .module1 import function
(适用于包内模块间的导入)
建议优先使用绝对导入,避免因路径问题引发错误
-
-
避免命名冲突
使用
from module import *
时,若模块与当前命名空间存在同名变量,会导致覆盖。建议明确导入所需成员 -
动态导入 使用
importlib
模块可动态导入模块,适用于运行时根据条件加载模块。 ```python import importlib my_module = importlib.import_module('mymodule') my_module.some_function()
四、示例综合应用
假设有以下包结构:
src/
env/
__init__.py
make_env.py # 包含 make_env 函数
main.py # 需要导入 env.make_env
-
同一目录下的导入 (直接导入函数)
# src/main.py from env import make_env make_env()
-
不同目录下的导入 (需调整
sys.path
或使用包管理工具)# src/main.py import sys sys.path.append('../Torch') from pwcong import some_function
通过以上方法,可以灵活管理包与模块的导入,提升代码的可维护性和复用性。