Python 轮子作业 - 找不到模块

问题描述 投票:0回答:5

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


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

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. 创建一个Pythonwheel类型的作业,然后将包名称设置为

    app_1
    ,入口点设置为
    main.func
    。当我运行作业时,出现无法找到
    app_1
    的错误。

databricks azure-databricks
5个回答
2
投票

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

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

在 Databricks 任务调度程序中:

Package name: app_1.main
Entry Point: func

在底层,Databricks 从包中读取元数据,并将整个轮子视为一个包,执行

import app_1.main

如果您的包在设置元数据中没有相同的名称,则调度程序将无法工作。


1
投票

您可以将 init.py 保留为空。在setup.cfg中,声明一个入口点函数

[options.entry_points]
console_scripts = 
    sample_entrypoint_name = app_1.main:func

在 Databricks 作业 UI 中,只需提及入口点名称 (sample_entrypooint_name)。如果您在“funct”函数中声明了 argeparse,请在参数部分中将它们作为参数提及。


0
投票

使其发挥作用的方法是使用以下内容更新

__init__.py

from my_package import main

然后在您的数据块工作中,您的入口点将是:

main.main
(假设您在
main
 中有一个函数 
main.py


0
投票

我认为您需要将包设置为

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


0
投票

在那里你可以看到一个带有Python Wheel任务的完整模板项目。请按照部署说明进行操作。

https://github.com/andre-salvati/databricks-template

© www.soinside.com 2019 - 2024. All rights reserved.