Как импортировать функции из подмодуля в яйцо Python?

У меня есть собственное яйцо Python, которое я написал, и я не могу заставить субмодуль (или вложенный модуль) загружаться извне. Я смог нормально загрузить модуль корневого уровня.

Вот запутанная структура:

my_egg/
    my_egg/
        __init__.py (empty file)
        module_one.py
        my_subdir\
            __init__.py (empty file)
            module_two.py
    setup.py

Импорт module_one работает:

from my_egg import module_one

Но я не могу заставить module_two импортировать. Вот что я пробовал:

from my_egg.my_subdir import module_two
from my_egg import my_subdir.module_two
from my_egg.my_subdir.module_two import *

Ни один из них не работал. Вот как выглядит мой setup.py:

from setuptools import setup

setup(name='my_egg',
  version='0.1',
  packages=['my_egg'],
  test_suite='nose.collector',
  tests_require=['nose'],
  zip_safe=False)

person Edward J. Stembler    schedule 19.06.2017    source источник


Ответы (1)


Я удивлен, что никто не ответил на это. Я смог заставить его работать после поиска в Google, извлечения из разных источников и пробуя разные вещи.

Одна вещь, которая задержала меня... Я пытался установить свое пользовательское яйцо в кластере Databricks. И я не понимал, что после удаления библиотеки (яйца) кластер необходимо перезапустить, чтобы его можно было удалить. Поэтому каждый раз, когда я пытался внести изменения, ничего не вступало в силу. Это определенно задержало мой прогресс.

В любом случае, я изменил свой файл setup.py, чтобы использовать find_packages, и внес изменения в пустые файлы __init__.py. Я не совсем уверен, были ли необходимы оба изменения или было бы достаточно одного.

Новый my_egg/setup.py:

exec(open('my_egg/version.py').read())

from setuptools import setup, find_packages

setup(name='my_egg',
      version=__version__,
      packages=find_packages(exclude=('tests', 'docs')),
      test_suite='nose.collector',
      tests_require=['nose'],
      zip_safe=False)

Я добавил файл my_egg/version.py, чтобы помочь мне отладить, если я использую правильную версию в кластере. Это дополнение привело меня к выводу, что Databricks требует перезапуска кластера.

Новый корневой файл инициализации my_egg/my_egg/__init__.py:

from .version import __version__
from .module_one import module_one_func
from .my_subdir.module_two import module_two_func

__all__ = ['module_one_func']

Новый подкаталог инициализации my_egg/my_egg/my_subdir/__init__.py:

from module_two import module_two_func

__all__ = ['module_two_func']
person Edward J. Stembler    schedule 20.06.2017