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

Python导入函数遇ModuleNotFoundError及导入优化问题求助

解决Python模块导入报错与简化导入的办法

一、先解决ModuleNotFoundError问题

你的文件结构是:

My_Code/
├─ Scratch_1.py
└─ Scratch_2.py

出现ModuleNotFoundError: No module named 'My_Code',是因为运行Scratch_2.py时,当前工作目录是My_Code文件夹内部,Python会从当前工作目录和sys.path里查找模块,此时My_Code并非当前目录的子文件夹,所以无法识别。

有两种可行的解决方式:

1. 将My_Code作为Python包导入(推荐)

  • 第一步:在My_Code文件夹内新建一个空白的__init__.py文件,让Python把这个文件夹识别为合法包。更新后的结构:
My_Code/
├─ __init__.py
├─ Scratch_1.py
└─ Scratch_2.py
  • 第二步:切换到My_Code的上级目录运行代码。比如My_Code在/home/user/projects/路径下,就进入该上级目录,执行命令:
python -m My_Code.Scratch_2

之后就能正常使用import My_Code.Scratch_1 as s1导入模块,调用函数时注意别再把别名写错成s4即可。

2. 临时添加路径到sys.path

如果不想改变运行目录,就在Scratch_2.py的最开头添加这段代码:

import sys
from pathlib import Path
# 将当前文件所在文件夹的上级目录加入Python搜索路径
sys.path.append(str(Path(__file__).parent.parent))

之后再执行import My_Code.Scratch_1 as s1就能成功导入。

二、简化多函数的导入语句

当Scratch_1里函数过多,不想写一堆零散的导入语句时,可以用这几种方式:

1. 导入整个模块并使用别名

就是你最初尝试的方式,一次导入整个模块,调用时用别名加函数名:

import My_Code.Scratch_1 as s1
# 调用示例
s1.function()
s1.another_function()

2. 通过__init__.py批量导出函数

在My_Code的__init__.py里添加:

from .Scratch_1 import function, another_function, third_function

之后在Scratch_2.py里可以直接这样导入:

from My_Code import function, another_function, third_function

不推荐用from My_Code import *的方式,容易引发命名冲突,明确列出需要的函数更稳妥。

3. 从模块导入所有函数(省事但不推荐)

如果不怕命名冲突,也可以直接写:

from My_Code.Scratch_1 import *
# 直接调用函数
function()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:45:28