Python怎样引用其他.py文件?怎样导入其他模块?

发布于:2025-02-17 ⋅ 阅读:(101) ⋅ 点赞:(0)

在 Python 中导入其他 .py 文件主要通过模块和包机制实现,以下是多种场景的导入方法。


基础目录结构示例

假设项目结构如下:

my_project/
├── main.py
├── utils/
│   ├── __init__.py
│   └── math_utils.py
└── models/
    ├── __init__.py
    ├── layers/
    │   ├── __init__.py
    │   └── activation.py
    └── dptnet/
        ├── __init__.py
        └── dpt_modules.py

1. 同级目录导入

math_utils.py 导入到 main.py

# main.py
from utils.math_utils import add_numbers  # 绝对导入

class MyModel:
    def __init__(self):
        print(add_numbers(1, 2))

2. 子目录导入

dpt_modules.py 导入到 main.py

# main.py
from models.dptnet.dpt_modules import DPTBlock  # 绝对导入

model = DPTBlock()

3. 多层相对路径导入

(1) 使用相对导入(包内部使用)

activation.py 中导入上级目录的模块:

# models/layers/activation.py
from .. import ModelBase  # .. 表示上一级目录(models)
from ...utils.math_utils import add_numbers  # ... 表示上两级目录(my_project)
(2) 多层子包相对导入

dpt_modules.py 中导入兄弟目录的模块:

# models/dptnet/dpt_modules.py
from ..layers.activation import ReLU  # 从 models/layers 导入

4. 使用 __init__.py 简化导入

在包的 __init__.py 中预先声明导出内容:

# models/dptnet/__init__.py
from .dpt_modules import DPTBlock, DPTEncoder  # 相对导入

现在可以直接从包名导入:

# main.py
from models.dptnet import DPTBlock  # 更简洁的导入方式

5. 处理特殊场景

(1) 动态添加系统路径(不推荐但实用)
import sys
sys.path.append("/path/to/my_project")  # 添加项目根目录到系统路径
from models.dptnet import DPTBlock
(2) 使用 importlib 动态导入
import importlib
module = importlib.import_module("models.dptnet.dpt_modules")
DPTBlock = getattr(module, "DPTBlock")