Зависимость не найдена в пакете Python Wheel в хранилищах данных

#python #jupyter-notebook #databricks #python-wheel

Вопрос:

Я создал файл колеса python, содержащий два файла python (file1.py и file2.py), которые имеют некоторые индивидуальные модули. file2.py имеет зависимость от file1.py.

Мой локальный каталог выглядит следующим образом после создания файла wheel:

 myfunc_wheel
├── build
|--myfunc.eg-info
└── myfuncpkg
     |_ __init__.py
     └── file1.py
     |__ file2.py
|__ dist
    |__myfunc-0.01-pu3-none-any.whl
|__ setup.py
 

file1.py:

 def hello_world():
   print("hello world")
 

file2.py

 import file1
#some functions
 

setup.py:

 import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="myfunc",
    version="0.0.1",
    author="xxx",
    author_email="x",
    description="xxxx",
    long_description=long_description,
    long_description_content_type="text/markdown",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.7',
)
 

Когда я запустил оба файла 1 и файл 2 локально, он не выдал ошибку.

Но после того, как я установил файл wheel в кластер Databricks и попытался импортировать модули в записную книжку Databricks, возникла ошибка, из-за которой файл2 не может найти файл1.

 from myfuncpkf import file1
from myfuncpkg import file2


ModuleNotFoundError: No module named 'file1'
 

Я также попытался указать весь путь к файлу1, но это тоже не сработало.

Как я должен настроить свои файлы, чтобы зависимость работала с данными?

Ответ №1:

Чтобы сделать каталог пакетом, вам нужно иметь __init__.py в каждой папке. попробуйте поместить пустой __init__.py файл в свой myfuncpkg каталог. Это должно решить проблему. обратитесь: https://realpython.com/lessons/package-initialization/

Комментарии:

1. спасибо, что ответили. Я проверил, что у меня действительно есть init.py в myfuncpkg. И зависимость работает и в моем местном тоже. Но не уверен, почему это не работает, когда я использую его в базах данных.