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

Python中__init__.py未将主目录识别为包的导入问题求助

问题描述

我的文件结构如下:

soar/
  __init__.py
  SignIn.py
  SignInOTP.py
  90min/
      __init__.py
      main.py

尝试在main.py中用相对导入访问上层文件的方法:

from ..SignIn import sign_in
from ..SignInOTP import sign_in_otp

但出现错误:

ImportError: attempted relative import with no known parent package

用python -m '.\90min\main.py'运行时又报错:

C:\Users\path\to\python.exe: Relative module names not supported

PyCharm里soar目录没有包图标,虽然可以把文件移到90min目录临时解决,但希望SignIn.py和SignInOTP.py留在soar主目录供多子目录使用。

解决方案

1. 以模块方式正确运行脚本

相对导入要求脚本作为包的一部分被运行,不能直接执行main.py。你需要在soar目录的父目录下执行命令:

python -m soar.90min.main

这样Python会把soar识别为合法包,相对导入即可正常工作。

2. 修复PyCharm的包识别问题

PyCharm未将soar识别为包,是因为它没被标记为源码根目录:

  • 右键点击soar目录 → 选择Mark Directory as → 点击Sources Root
  • 操作后soar目录会显示包图标,PyCharm也能正确解析相对导入语法。

3. 可选:用绝对导入替代相对导入

如果不想依赖模块运行方式,可通过修改sys.path实现绝对导入。在main.py中添加以下代码:

import sys
from pathlib import Path

# 将soar的父目录加入Python搜索路径
sys.path.append(str(Path(__file__).parent.parent))

from SignIn import sign_in
from SignInOTP import sign_in_otp

内容的提问来源于stack exchange,提问作者J. Jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:24:55