2010-08-26 3 views
7

Мне интересно, какой правильный/самый простой/самый pythonic способ иметь дело с подпроектами, которые вы хотите использовать с одним базовым пакетом. В настоящее время мы имеем файловую структуру, как это:Как управлять несколькими подпроектами python с помощью setuptools?

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

Мы хотим, чтобы сохранить пространство имен COMPANY_NAME общим для всех наших проектов (? может быть, это само по себе является unpythonic), но когда proj1 и proj2 установлены в режиме разработки, первый установленный сломан. Похоже, import company_name... путается, на какой пакет company_name нужно посмотреть, и он захватывает первый/последний/случайный.

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


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

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

с в __init_.py файлов соответствующего pkg_resources.declare_namespace(__name__), но ./setup.py bdist_egg просто дает:

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

ответ

6

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

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

+3

Вот что я разработал для ключевого слова 'namespace_packages', и поэтому вы действительно сделали это правильно. –

+0

Моя компания начала использовать пакеты пространства имен, и это закончилось огромной ошибкой, когда с ними была нарушена большая функциональность, доступная в обычных проектах (запуск модульных тестов, установка которых была сложной и т. Д.). Просто слово предупреждения. – Lucas

Смежные вопросы