Несколько подпакетов в одной упаковке - PullRequest
2 голосов
/ 09 января 2020

Я пытаюсь написать пакет со следующей структурой

/package
    setup.py

    /subpackage1
        subpackage1.py
        __init__.py
    /subpackage2
        subpackage2.py
        __init__.py
        /utils
            some_other_files_and_codes
            __init__.py

Мой setup.py в настоящее время выглядит следующим образом:

from setuptools import setup, find_packages

setup(
        name = 'subpackage1',
        version = '1.0',
        install_requires=['numpy', 
                          'scipy'],
        packages = find_packages(),                       
      )

Затем я устанавливаю его с помощью pip install -e . из папки /package. Однако я не могу импортировать subpackage2, только subpackage1.

Я бы хотел иметь возможность импортировать их как

from package import subpackage1
from package import subpackage2

Это важно, потому что subpackage1 и subpackage2 также существуют как автономные пакеты в моей системе.

Может кто-нибудь помочь мне с этим?

1 Ответ

1 голос
/ 09 января 2020

Фрагменты, которые вы показываете, не имеют смысла. Похоже, есть недопонимание, в частности, возможно, существует путаница между именем проекта Python и именами импортируемых пакетов верхнего уровня.

В вызове функции setuptools.setup() параметр * Аргумент 1004 * должен быть именем проекта, а не именем импортируемого пакета верхнего уровня. Это могут быть одинаковые имена, но не обязательно.

Следующее может сделать его более явным:

MyPythonProject
├── my_importable_package_one
│   ├── __init__.py
│   └── my_module_foo.py
├── my_importable_package_two
│   ├── __init__.py
│   └── my_module_bar.py
└── setup.py

setup.py

import setuptools
setuptools.setup(
    name='MyPythonProject',
    version='1.2.3',
    packages=['my_importable_package_one', 'my_importable_package_two'],
    # ...
)
from my_importable_package_one import my_module_foo
from my_importable_package_two import my_module_bar

Может быть эта статья о терминологии Python упаковка может помочь.

...