Databricks作业中Python Wheel包遇ModuleNotFoundError问题求助
解决ModuleNotFoundError: No module named 'my_code'问题
1. 先确认my_code是合法的Python包
- 检查
my_code目录下有没有__init__.py文件(空文件也行),没有的话立刻创建一个。setuptools.find_packages()只会把包含这个文件的目录识别为Python包。
2. 验证打包逻辑是否能识别到my_code
- 本地先跑一遍
python setup.py bdist_wheel生成Wheel包,或者用pip install -e .安装开发版,然后打开Python交互环境试import my_code:- 如果本地也报错,说明打包时根本没把my_code包含进去,直接看下一步调整setup.py;
- 如果本地能正常导入,问题大概率出在Databricks作业的配置上。
3. 强制指定要打包的包
如果find_packages()没自动识别到my_code,直接在setup.py里显式列出所有需要打包的模块:
import setuptools import test_calcular setuptools.setup( name='test_calcular', version= test_calcular.__version__, author= test_calcular.__autor__, description= "Prueba sobre empaquetar Python en Databricks", # 显式列出所有要打包的包 packages=['test_calcular', 'my_code'], # 或者用find_packages的include参数限定范围 # packages=setuptools.find_packages(include=['test_calcular', 'my_code']), entry_points={ 'group_1': 'run=test_calcular.__main__:main' }, install_requires=[ 'setuptools' ] )
4. 检查代码里的导入写法
- 确保代码用的是绝对导入:比如
import my_code或者from my_code import 你的类;如果用相对导入(比如from .my_code import xxx),要保证运行时的上下文符合包层级关系。 - Databricks安装Wheel包后,模块会放到Python的site-packages目录,绝对导入是最稳妥的写法。
5. 确认Databricks作业的Wheel包安装正确
- 检查作业配置里是否正确上传并指定了Wheel包作为依赖;可以在作业里加一个前置步骤,运行
pip list查看是否有test_calcular包,确认包内容里包含my_code模块。
6. 检查打包后的Wheel内容
- 生成Wheel包后,用
unzip -l test_calcular-xxx.whl命令查看内部文件结构,确认里面有my_code目录和对应的.py文件。如果没有,说明打包逻辑还是有问题,回到前面的步骤调整。
内容的提问来源于stack exchange,提问作者Moisés
相关产品推荐
相关产品推荐

