You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在层级目录结构中共享Python类并实现跨目录导入

解决方案

第一步:补全包标识文件

先在3个目录下新增空的__init__.py文件,将目录标识为Python可识别的包,调整后目录结构如下:

/.git
/README.md
/project
    __init__.py
    /Operation A
        __init__.py
        generateinsights.py
        insights.py
    /Operation B
        __init__.py
        generatetargets.py
        targets.py

注意:建议将Operation A、Operation B的文件夹名改为无空格的OperationA、OperationB,避免跨版本导入时出现兼容问题,以下示例均按修改后的无空格目录名演示。


可选方案1:遵循Python包规范运行(推荐生产环境使用)

该方案不需要修改代码内的路径逻辑,符合Python包管理标准

  1. 写导入语句时使用绝对路径
    • 在generatetargets.py中导入insight对象的写法:
    from OperationA.insights import insight
    
    • 任意project目录下的文件要导入target对象的写法:
    from OperationB.targets import target
    
  2. 运行脚本时切换到项目根目录(即包含.git、README.md的上层目录),用模块模式执行:
    # 运行generatetargets.py的示例
    python -m project.OperationB.generatetargets
    

可选方案2:动态添加搜索路径(适合本地快速调试)

该方案可以保持原有的直接运行脚本的习惯,不需要修改执行命令

  1. 在所有需要跨包导入的脚本开头,先添加路径处理代码,比如在generatetargets.py开头写:
    import sys
    from pathlib import Path
    # 定位到项目根目录并加入Python导入搜索路径
    sys.path.append(str(Path(__file__).parent.parent.parent.resolve()))
    
  2. 之后就可以用和方案1完全相同的绝对导入语句引用目标对象,直接执行python generatetargets.py也可以正常运行。

内容的提问来源于stack exchange,提问作者Deemo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:15:03