Python自定义模块导入报错:ModuleNotFoundError及多进程问题
问题:Python自定义模块导入与多进程启动报错
初始问题:ModuleNotFoundError
正在进行基础Python开发,使用他人编写的自定义模块时遇到报错,无法定位问题。文件夹结构包含test文件夹,其中有testing.py文件,代码如下:
from util import get_data, plot_data fruits = ["apple", "banana", "cherry"] for x in fruits: print(x)
执行命令python testing.py时触发ModuleNotFoundError。已检查路径,确认路径无问题,且当前已激活conda环境。
后续报错:多进程启动方法错误
按照建议改为相对导入后,跳过了模块找不到的错误,但出现新的报错信息:
Traceback (most recent call last): File "C:\ProgramData\Anaconda3\envs\ml4t\lib\multiprocessing\context.py", line 190, in get_context ctx = _concrete_contexts[method] KeyError: 'fork' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "grade_analysis.py", line 21, in <module> from grading.grading import ( File "E:\_Repo\GT\CS7646\mls4tsp23\grading\grading.py", line 15, in <module> multiprocessing.set_start_method('fork') File "C:\ProgramData\Anaconda3\envs\ml4t\lib\multiprocessing\context.py", line 246, in set_start_method self._actual_context = self.get_context(method) File "C:\ProgramData\Anaconda3\envs\ml4t\lib\multiprocessing\context.py", line 238, in get_context return super().get_context(method) File "C:\ProgramData\Anaconda3\envs\ml4t\lib\multiprocessing\context.py", line 192, in get_context raise ValueError('cannot find context for %r' % method) ValueError: cannot find context for 'fork'
解决方案
处理ModuleNotFoundError
- 确认
util模块位置并调整导入方式- 若
util.py与test文件夹同级,改用相对导入:
此时需将from ..util import get_data, plot_datatest作为包运行,执行命令改为python -m test.testing,不能直接运行testing.py。 - 或者手动添加模块路径:
在testing.py开头加入以下代码,将util所在目录加入Python搜索路径:import sys from pathlib import Path sys.path.append(str(Path(__file__).parent.parent)) from util import get_data, plot_data
- 若
处理多进程fork方法报错
Windows系统不支持fork启动方法,修改grading.py中的代码:
将multiprocessing.set_start_method('fork')替换为:
import multiprocessing if __name__ == '__main__': # 适配Windows系统,使用spawn启动方法 multiprocessing.set_start_method('spawn')
或者直接移除set_start_method的显式设置,让Python自动根据系统选择默认启动方法。
内容的提问来源于stack exchange,提问作者M.R.
相关产品推荐
相关产品推荐

