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

Python 3.6.9从父目录导入自定义模块出现ImportError问题咨询

Python 3自定义模块相对导入报错问题解决方案

问题根源

  • 相对导入仅在文件作为包的一部分被导入时生效,你直接通过python calling_module.py运行脚本时,Python会将该文件的__name__属性设为__main__,不会识别其所属的父包结构,因此.、..对应的相对路径无法解析,触发attempted relative import with no known parent package报错。
  • Python语法规定import语句后只能接绝对模块名,不能直接跟./..,因此你尝试的import ..neural_networks、import .neural_networks会直接触发语法错误。
  • 你第5种写法可正常运行的原因:直接运行脚本时,Python会自动将脚本所在的directory目录添加到模块搜索路径sys.path的最优先级,此时import neural_networks导入的是directory目录下的neural_networks.py,而非根目录下的目标文件。

解决方案

方案1:临时调整模块搜索路径(适合小型脚本快速使用)

在calling_module.py最开头添加如下代码,将根目录添加到搜索路径中,如需优先导入根目录的重名模块,可将append改为insert(0, ...)调整搜索优先级:

import os
import sys
# 获取根目录的绝对路径
root_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 添加到模块搜索路径
sys.path.append(root_path)

添加后即可按需导入:

  • 导入根目录下的neural_networks:import neural_networks as root_nn
  • 导入directory下的neural_networks:from directory import neural_networks as local_nn

方案2:以包模块形式运行脚本(符合Python规范的写法)

  1. 分别在根目录、directory目录下添加空的__init__.py文件,标记为Python包
  2. 不要进入directory目录运行脚本,在根目录下执行如下命令运行:
    python -m directory.calling_module
    
  3. 此时相对导入可正常使用:
    • 导入根目录下的neural_networks:from .. import neural_networks
    • 导入directory下的neural_networks:from . import neural_networks

方案3:全局配置搜索路径(适合长期项目)

将项目根目录的绝对路径添加到系统的PYTHONPATH环境变量中,配置完成后无需每次调整sys.path,即可在任意位置直接导入根目录下的模块。


内容的提问来源于stack exchange,提问作者Marte Valerio Falcone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:09:02