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

跨目录导入自定义Enum类报错ModuleNotFoundError: No module named 'enums'的解决咨询

跨目录导入自定义Enum类报错ModuleNotFoundError: No module named 'enums'的解决咨询

嘿,我之前也踩过这个跨目录导入的坑,本质上是Python的模块搜索路径没包含到你的enums目录导致的,结合你的目录结构,给你几个实用的解决办法:

先再明确下你的目录结构,方便大家对照:

- 项目根目录
  - enums
    -- __init__.py
    -- flavors.py
  - setUp
    -- test.py

方法一:手动添加项目根目录到Python搜索路径(最常用灵活)

在test.py的最开头加上这段代码,把项目根目录添加到Python的模块搜索路径里,这样Python就能找到enums模块了:

import sys
import os

# 获取当前test.py文件的绝对路径,再往上退两级到项目根目录
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(project_root)

# 现在就能正常导入了
from enums.flavors import Flavor

解释下:os.path.abspath(__file__)会拿到test.py的完整路径,两次dirname就跳到了包含enums和setUp的根目录,把这个路径加到sys.path后,Python就会去这里找模块了。

方法二:使用相对导入(适合把项目当作包运行的场景)

如果你习惯用模块方式运行脚本,可以用Python的相对导入语法,在test.py里这么写:

from ..enums.flavors import Flavor

⚠️ 注意:这种方式不能直接运行test.py(比如直接敲python setUp/test.py会报错ValueError: attempted relative import in non-package),必须从项目根目录用模块命令运行:

python -m setUp.test

这样Python会把整个项目当作一个包来处理,相对导入就能生效了。

方法三:把enums安装成可编辑包(适合大型项目)

如果你的项目规模比较大,后续经常要跨目录导入enums里的内容,可以把它打包成可编辑的Python包,这样全局都能直接导入:

  1. 在项目根目录创建一个setup.py文件,内容如下:
from setuptools import setup, find_packages

setup(
    name="my_flavor_enums",
    packages=find_packages(),
    version="0.1.0",
)
  1. 在项目根目录运行这条命令,把包以可编辑模式安装:
pip install -e .

之后不管你在哪个脚本里,直接写from enums.flavors import Flavor就能成功导入了,而且你对enums文件夹里的代码修改会实时生效,不用重新安装。

额外小优化:简化导入路径

如果你想让导入更简洁,可以在enums/__init__.py里加上一行:

from .flavors import Flavor

这样之后导入的时候就可以直接写:

from enums import Flavor

不用再写长长的enums.flavors啦~

备注:内容来源于stack exchange,提问作者camel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:59:34