Как управлять несколькими подпроектами Python с помощью setuptools? - PullRequest
8 голосов
/ 26 августа 2010

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

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 или стеке, поэтому любая информация, даже просто ссылки, очень ценится!


edit: я только что попытался добавить 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 просто дает:

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

1 Ответ

7 голосов
/ 27 августа 2010

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

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

...