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
相关产品推荐
相关产品推荐

