当前位置: 首页 > news >正文

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

在 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")
http://www.dtcms.com/a/20699.html

相关文章:

  • DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型
  • 150,[5] BUUCTF WEB [BJDCTF2020]EasySearch
  • 【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列
  • Mac Golang 开发环境配置
  • Python 模块加载机制导致的问题
  • 146,[1] BUUCTF WEB [SWPU2019]Web1
  • Python的imutils库详细介绍
  • Linux(socket网络编程)UDP---初学
  • nacos学习笔记
  • DeepSeek-R1:通过强化学习激励大型语言模型的推理能力
  • 【LeetCode】3.无重复字符的最长字串
  • Qt中基于开源库QRencode生成二维码(附工程源码链接)
  • Mac 开发工具推荐
  • 《云原生安全攻防》-- K8s镜像安全:镜像全生命周期安全管理
  • 深入解析类方法与静态方法 —— 内存分析与直观图示详解
  • 项目访问出现504 Gateway Time-out nginx/1.21.6的情况
  • 注册表单提交加验证码功能
  • 服务器租用:虚拟化技术都包含哪些内容?
  • 2025年2月9日(数据分析_2)
  • Spring AI发布!让Java紧跟AI赛道!
  • ailx10的发明专利思路
  • HDFS体系结构
  • 【深度学习】深度学习和强化学习算法——深度 Q 网络DQN
  • 【SQL SERVER】sqlserver 该表字段如果被用作其他表的外键不能被truncate table
  • 掌握xtquant实时行情订阅:量化交易的关键一步
  • 强化学习笔记7——DDPG到TD3
  • 速度与激情:4.5吨轻卡阻力与刹车力模型的终极拆解——从仿真台架到真实路况的硬核对话
  • 2025年2月16日(numpy-deepseek)
  • 【云原生】SpringCloud-Spring Boot Starter使用测试
  • Spring源码分析のBean创建流程(上)