Создание мультикаталогового пространства имен Python

Извините, новичок здесь (используя Python 3.6)! Пожалуйста, извините за любую запутанную терминологию!:-(

На основе структуры каталогов показано ниже...

C-Drive/
--> DPT/
----> departmentpythontools/
------> Utilies/
----------> util1.py
----------> util2.py
------> DataPull/
----------> pull1.py
----------> pull2.py
------> DataPush/
----------> push1.py
----------> push2.py

... содержащий три папки (Utilities, DataPull и DataPush), в каждой из которых есть несколько модулей Python, я бы хотел, чтобы папка "Departmentpythontools" была "пространством имен", чтобы я мог использовать такой оператор "import", как этот:

import departmentpythontools.Utilities as dptu

И тогда я могу получить доступ к любым функциям в папке Utilities как dptu.push1.bob(), так далее.

Поскольку все это происходит внутри компании, я не хочу подталкивать PyPI. Вместо этого я создаю файл.tar.gz, используя

python setup.py sdist

после чего создается папка dist, содержащая файл.tar.gz (называемый departmentpythontools.tar.gz). Это работает без проблем. Затем я "устанавливаю" это с помощью pip, используя следующую команду:

pip install departmentpythontools --find-links file:///C:/DPT/deparmentpythontools/dist

Установка продолжается без ошибок. Но когда я использую импорт, я не вижу в списке отделов pythontools, а вижу Utilites, DataPull и DataPush. (Я также могу получить доступ к программам ниже, используя стандартную нотацию.) Я пробовал несколько комбинаций namespace_packages=, packages= и т. Д., А также __init__.py не содержащий ничего, функция пространства имен (__import__("pkg_resources").declare_namespace(__name__)), функция пути (__path__ = __import__('pkgutil').extend_path(__path__, __name__)) и т. д. Ничто из этого не похоже на работу. Вот часть моего setup.py:

setup(
    name='DepartmentPythonTools',  
    version='0.1.0',
    description='Department Python Tools',
    long_description='This contains the department Python tools',
    author='Just Me',
    author_email='justme@holidays.com',

    # As you see below, there have been several attempts at this!
    #namespace_packages=['DataPull','DataPush','Utilities'],
    #packages=find_packages(),
    #namespace_packages=['departmentpythontools'],
    packages=['departmentpythontools','departmentpythontools.DataPull','departmentpythontools.DataPush','departmentpythontools.Utilities'],
    install_requires=['psycopg2','cx_Oracle'],
)

Все, что я хочу сделать, - это сделать вещи более понятными, используя пространство имен в качестве "верхнего уровня", а не просто указывать имена модулей после того, как ключевое слово "импорт" введено в редакторе. Может быть, я пытаюсь быть слишком "чистым".

Любая помощь будет принята с благодарностью!

0 ответов

Другие вопросы по тегам