Setuptools Subpackages с чистым пространством имен - PullRequest
0 голосов
/ 25 февраля 2019

Я использую setuptools 40.8.0 под python 3.7.2, чтобы упаковать вместе некоторые модули и пакеты, чтобы сделать их доступными для всей системы.Моя цель - создать чистое пространство имен, в котором функции объединены в функциональные блоки.

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

mymodule
|  setup.py
|  mymodule
 -  | __init__.py
  - |package_foo
     - __init__.py
     - some_script.py

setup.py:

from setuptools import setup, find_packages

setup(name='mymodule',
      version='1.0',
      packages=find_packages(),
      zip_safe=False)

верхний уровень __init__.py:

from . import package_foo

второй уровень __init__.py:

from .some_script import some_function

(Я на самом деле не уверен, зачем нужна первая точка в импорте, ноКажется, я не делаю его работоспособным без.)

Теперь, если я сделаю

import mymodule

, у меня будет mymodule.package_foo.some_function в моем пространстве имен (которое я хочу), но также mymodule.package_foo.some_script (что я не хочу).Я мог бы добавить строку на втором уровне __init__.py, удалив some_script, выполнив

del some_script

, но это не так.Есть ли другой, более элегантный способ добиться того, что я пытаюсь?Или стоит оставить some_script в пространстве имен?

1 Ответ

0 голосов
/ 27 февраля 2019

Я нашел обходной путь, который работает для меня.Если имя модуля начинается с подчеркивания, оно не включается в пространство имен автоматически.Я изменил some_script.py на _some_script.py, а также операторы импорта.

...