尝试在 Azure Databricks 上导入已安装的 Python Wheel 包时出现操作系统错误

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

我有一个名为

my_sdk.whl
的轮子包,是我在本地开发和构建的。
我还在虚拟环境中使用 pip install my_sdk.whl 测试了这个包,并尝试在本地 pyspark 应用程序上使用这些模块,所有这些都运行良好。

现在,我尝试将其上传到

dbfs:/libraries/my_sdk.whl
路径下的 databricks 文件系统,并使用“计算”页面中的“库”选项卡将其安装在我的交互式集群中。重新启动集群并成功安装后,我尝试在 databricks 存储库笔记本中使用它。

import my_sdk

运行命令...状态

中执行上述代码需要10-20分钟

然后我会收到以下错误:

OSError: [Errno 5] Input/output error: '/Workspace/Repos/my-userxxx/path/to/notebooks'
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
File <command-3809752991307962>, line 1
----> 1 import my_sdk

File <frozen importlib._bootstrap>:1027, in _find_and_load(name, import_)

File <frozen importlib._bootstrap>:1002, in _find_and_load_unlocked(name, import_)

File <frozen importlib._bootstrap>:945, in _find_spec(name, path, target)

File <frozen importlib._bootstrap_external>:1439, in find_spec(cls, fullname, path, target)

File <frozen importlib._bootstrap_external>:1411, in _get_spec(cls, fullname, path, target)

File <frozen importlib._bootstrap_external>:1548, in find_spec(self, fullname, target)

File <frozen importlib._bootstrap_external>:1591, in _fill_cache(self)

OSError: [Errno 5] Input/output error: '/Workspace/Repos/my-userxxx/path/to/notebooks'

知道我为什么会收到这个吗?

附加信息:

  • 执行时间太长有时能导入包成功,有时不能导入包
  • 修复此问题后,我将在作业集群上运行笔记本并使用 Azure Databricks 对其进行编排。
  • 我正在使用Windows 10和Python 3.10.11来编译wheel包。
  • 我用来编译wheel包的命令是
    python -m build --wheel
  • 我的交互式集群运行时版本是 13.3,20 分钟后终止。
  • setup.py 文件包含以下内容:
"""Setup.py script for packaging project."""

from setuptools import setup, find_packages

import os


def read_pip_requirements(filename: str):
    filepath = os.path.join(os.path.dirname(__file__), filename)
    with open(filepath) as f:
        return f.readlines()


if __name__ == '__main__':
    sdk_version = os.environ.get("BUILD_NUMBER")

    if sdk_version is None:
        raise ValueError("SDK Version Cannot be Null. Did you initialized the BUILD_NUMBER variable?")

    setup(
        name="my_sdk",
        version=sdk_version,
        package_dir={"": "src"},
        packages=find_packages(where="src", include=["my_sdk*"]),
        description="Software Development Kit for My Project",
        install_requires=["pyspark==3.4.1"]
    )

我尝试了以下操作,但在导入过程中我仍然面临长时间运行的单元问题,并且在等待后会随机收到操作系统错误或成功导入。

  • 运行
    %pip freeze
    命令,它显示该软件包已安装@
    file:///local_disk0/tmp/addedFile375359a4e2e749fba4206df7c97999b07096403526362698460/my_sdk-10003-py3-none-any.whl
  • 使用网络终端并运行python来查看是否可以导入my_sdk,并且可以导入它真正快没有任何问题
  • 重新启动交互式集群并运行笔记本
  • 使用附加库中配置的wheel包在ADF Databricks Notebook活动中旋转作业集群
  • 使用较旧的 Databricks 运行时版本
python databricks azure-databricks python-wheel
1个回答
0
投票

我注意到的一件事是,当我使用单个单元运行笔记本(不在 Repos 文件夹下)时

import my_sdk
,它可以毫无问题地导入包。我相信这与microsoft 文档中提到的库优先级有关。基于第二个优先级Repo(Git 文件夹)根目录中的库(仅限 Repos)。这可能是因为我的 Repos 工作区中的根文件夹同时包含 adf 资源和 databricks 资源,这就是为什么 databricks 需要花费大量时间来搜索匹配的 python 包。

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