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

Python跨目录导入模块报错求助:测试文件无法导入主目录模块

解决Python模块导入失败的问题

你的问题出在路径配置和导入语句不匹配上,我给你几个实用的解决方案,按优先级推荐:

方案1:简化导入语句(最快解决)

你已经把项目根目录/home/udit/Desktop/owl_ontology/owl_ontology/加入了sys.path,这时候直接导入根目录下的模块就行,不需要加包名前缀。修改你的导入代码:

import json
import sys
sys.path.insert(0,'/home/udit/Desktop/owl_ontology/owl_ontology/')
import unittest
import os, pathlib
from unittest.main import main

# 直接导入模块,不用加owl_ontology前缀
from dataframe_creation import DataframeCreation
from ontologyV1 import OntologyV1  # 按需导入OntologyV1

之前报错是因为你写了from owl_ontology.dataframe_creation...,Python会在sys.path里找名为owl_ontology的子文件夹,但你的根目录本身就是owl_ontology,里面直接是dataframe_creation.py,所以找不到这个子文件夹。

方案2:使用相对路径导入(更规范,推荐)

因为tests是项目根目录的子文件夹,而且根目录和tests目录都有__init__.py(已经满足包的要求),可以用相对路径导入:

import json
import unittest
import os, pathlib
from unittest.main import main

# 用..表示上级目录(项目根目录)
from ..dataframe_creation import DataframeCreation
from ..ontologyV1 import OntologyV1

⚠️ 注意:这种方式需要你在项目根目录下运行测试,比如执行:

python -m unittest tests.test_ontology

不要直接进入tests目录运行python test_ontology.py,否则相对路径会失效。

方案3:动态获取项目根目录(最灵活,适合多环境)

硬编码路径容易因为项目移动而失效,推荐通过脚本位置动态计算根目录:

import json
import sys
import unittest
import os, pathlib
from unittest.main import main
from pathlib import Path

# 获取当前测试脚本的所在目录
current_test_dir = Path(__file__).resolve().parent
# 项目根目录是测试目录的上一级
project_root = current_test_dir.parent
# 将根目录加入sys.path
sys.path.append(str(project_root))

# 现在可以直接导入模块
from dataframe_creation import DataframeCreation
from ontologyV1 import OntologyV1

这种方式不管你的项目移到哪个路径下,都能自动找到根目录,避免硬编码的维护问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:27:31