Вопрос

Я задаюсь вопросом о правильном / простом / самым питонным способам борьбы с подпроектами, которые вы хотите, использовали тот же базовый пакет. В настоящее время у нас есть такая структура файлов:

trunk\
    proj1\setup.py
          company_name\__init__.py + proj1's code
    proj2\setup.py
          company_name\__init__.py + proj2's code

Мы хотим сохранить пространство имен Company_Name, общую для всех наших проектов (может быть, это сама не является невыпущенным?) Но когда Proj1 и ProJ2 установлены в режиме разработки, первый установлен первый сломан. Это выглядит как import company_name... запутается на каком пакете Company_Name, чтобы посмотреть, и он захватывает первый / последний / случайной.

Как обычно это обрабатывается в более крупном проекте Python? Можно ли разрешить это с помощью Setup.py в багажнике, который строит какое-то мега-яйцо? Я не нашел никакой соответствующей информации о Google или Stack, поэтому любая информация, даже лишь ссылки, очень ценится!


Редактировать: я просто попытался добавить Setup.py в корневой папке с

...    
namespace_packages = ['company_name'],
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']}
...

с уместно pkg_resources.declare_namespace(__name__) в __init_.py Файлы, но ./setup.py bdist_egg просто дает:

Ошибка в команде setup company_name: распространение не содержит модулей или пакетов для пакета пространства имен 'Company_name'

Это было полезно?

Решение

Хотя я не могу поручиться за питонность моего решения, я наконец-то получил разные приложения, которые работают вместе. Я был на правильном пути с пакетами пространства имен, но вместо того, чтобы пытаться иметь один супер-проект в багажнике, я добавил namespace_packages Линия в настройке. Это привело к ведущему ведущему, при установке вместе, совместно используя company_name пространство имен как предполагалось.

Любой, кто хочет взломать на WHER, это разумное решение Python, мне все еще интересно услышать, если это «так, как это сделано». Это чувствует себя правильно, но это может быть потому, что имитирует стиль Java, который я больше привык.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top