Создание мультикаталогового пространства имен 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'],
)
Все, что я хочу сделать, - это сделать вещи более понятными, используя пространство имен в качестве "верхнего уровня", а не просто указывать имена модулей после того, как ключевое слово "импорт" введено в редакторе. Может быть, я пытаюсь быть слишком "чистым".
Любая помощь будет принята с благодарностью!