Относительный импорт в Python упаковке, похоже, не работает - PullRequest
2 голосов
/ 16 февраля 2020

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

mypackage/
  util/
    __init__.py
    a.py
  b.py
  __init__.py
  setup.py

Файлы __init__.py пусты. В b.py имеется импорт util/a.py:

from .util import a

Тесты, включенные в пакет, работают нормально. Однако, когда я устанавливаю пакет и пытаюсь использовать его в другом проекте с from mypackage import b, я получаю:

File [...] , in <module>
    from mypackage import b
File "/usr/local/lib/python3.7/site-packages/mypackage-0.0.1-py3.7.egg/mypackage/b.py", line 1, in <module>
    from .util import a
ModuleNotFoundError: No module named 'mypackage.util'

Edit 1

setup.py выглядит так:

from setuptools import setup

setup(name="mypackage",
      version="0.0.1",
      description="My package",
      packages=["mypackage"])

1 Ответ

1 голос
/ 17 февраля 2020

Вы должны включить этот подпакет в вызов setup, иначе он не будет установлен:

setup(
    ...
    packages=[
        'mypackage',
        'mypackage.util',
    ]
)

Вы также можете использовать setuptools.find_packages для автоматизации этого процесса:

from setuptools import find_packages

setup(..., packages=find_packages())
...