【问题标题】:Python wheel job - module not foundPython 轮子作业 - 未找到模块
【发布时间】:2022-08-11 00:59:48
【问题描述】:

问题:我用一个非常基本的模块制作了一个轮子,将它安装在 Databricks 集群上。创建“Python wheel”类型的作业时,该作业无法运行,因为它找不到包。


设置非常简单。我有一个源代码文件夹:

src
|-app_1
  |- __init__.py
  |- main.py

其中main.py 包含:

def func(): 
    print(\'Hello world!\')

然后,我执行以下操作:

  1. src 构建为轮子demo-0.0.0-py3-none-any.whl

  2. 在 Databricks 集群中安装 demo-0.0.0-py3-none-any.whl。然后我验证轮子的制造和安装是否正确。我知道这一点是因为我能够运行from app_1.main import func,然后调用func 成功。这是安装在集群中的唯一轮子。

  3. 创建一个 Python 轮子类型的作业,然后将包名称设置为 app_1 并将入口点设置为 main.func。当我运行作业时,我收到一个错误,指出找不到 app_1

    标签: databricks azure-databricks


    【解决方案1】:

    让它工作的方法是更新__init__.py,如下所示:

    from my_package import main
    

    然后在你的databricks工作中,你的入口点是:main.main(假设你在main.py中有一个函数main

    【讨论】:

      【解决方案2】:

      我认为您需要将包设置为app1.main 并将入口点设置为func,因为文档说它将调用$packageName.$entryPoint(),而在您的情况下,完整的命令是app1.main.func()

      【讨论】:

      • 不幸的是,同样的结果:Run result unavailable: job failed with error message Python wheel with name app_1.main could not be found。驱动日志:PackageNotFoundError: app_1.main
      • 啊,您需要添加一个依赖库,通过在 DBFS 上指定它的路径……您根本没有将代码附加到作业
      • 到目前为止,感谢您的 cmets。指定的 DBFS 路径仅适用于作业类型“Python”。但是对于作业类型“Python Wheel”,它要求将 .whl 作为库上传,我也尝试过上传它(除了已经安装在同一个集群中),但是同样的错误。
      【解决方案3】:

      您必须在设置中将您的轮子命名为与您将在 databricks 任务调度程序中调用的名称相同的名称:

      setup(
          name="app_1.main",
          ...
      )
      

      在 Databricks 任务调度程序中: Package name: app_1.mainEntry Point: func

      在后台 Databricks 从包中读取元数据并将整个轮子视为一个包,执行import app_1.main

      如果您的包在设置元数据中没有相同的名称,则调度程序不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-05
        • 2021-08-19
        • 1970-01-01
        • 2017-09-19
        • 2021-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多