py2app получает подкаталог .git пакета во время сборки

Мы широко используем py2app на нашем предприятии для создания автономных пакетов .app для легкого внутреннего развертывания без проблем с зависимостями. Что-то, что я недавно заметил и понятия не имею, как это началось, заключается в том, что при создании .app py2app начал включать каталог .git нашей основной библиотеки.

Например, commonLib — это наш корневой пакет библиотеки Python, который представляет собой репозиторий git. В этом пакете находятся различные подпакеты, такие как база данных, утилита и т. д.

commonLib/
    |- .git/ # because commonLib is a git repo
    |- __init__.py
    |- database/
        |- __init__.py
    |- utility/
        |- __init__.py
    # ... etc

В заданном проекте, скажем, Foo, мы будем выполнять импорт, например из commonLib import xyz, чтобы использовать наши общие пакеты. Сборка с помощью py2app выглядит примерно так: python setup.py py2app

Итак, недавняя проблема, с которой я сталкиваюсь, заключается в том, что при сборке приложения для проекта Foo я вижу, что оно включает все в commonLib/.git/ в приложение. , что является дополнительным раздуванием. py2app имеет опцию exclude, но, похоже, это только для модулей python. Я не могу понять, что нужно, чтобы исключить подкаталог .git, или, на самом деле, что заставляет его включаться в первую очередь.

Кто-нибудь сталкивался с этим при использовании импорта пакета python, который является репозиторием git? В наших файлах setup.py для каждого проекта ничего не изменилось, а commonLib всегда был репозиторием git.Таким образом, единственное, что я могу представить как переменную, — это версия py2app и ее приложений, которые, очевидно, со временем обновлялись.

Редактировать

На данный момент я использую последнюю версию py2app 0.6.4. Кроме того, мой setup.py был впервые сгенерирован из py2applet некоторое время назад, но с тех пор был настроен вручную и скопирован в качестве шаблона для каждого нового проекта. Я использую PyQt4/sip для каждого из этих проектов, поэтому я также задаюсь вопросом, не проблема ли это с одним из рецептов?

Обновление

В первом ответе я попытался исправить это, используя различные комбинации настроек exclude_package_data. Кажется, ничто не заставляет каталог .git исключаться. Вот пример того, как обычно выглядят мои файлы setup.py:

from setuptools import setup
from myApp import VERSION

appname = 'MyApp'
APP = ['myApp.py']
DATA_FILES = []
OPTIONS = {
    'includes': 'atexit, sip, PyQt4.QtCore, PyQt4.QtGui',
    'strip': True, 
    'iconfile':'ui/myApp.icns', 
    'resources':['src/myApp.png'], 
    'plist':{
        'CFBundleIconFile':'ui/myApp.icns',
        'CFBundleIdentifier':'com.company.myApp',
        'CFBundleGetInfoString': appname,
        'CFBundleVersion' : VERSION,
        'CFBundleShortVersionString' : VERSION
        }
    }

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

Я пробовал такие вещи, как:

setup(
    ...
    exclude_package_data = { 'commonLib': ['.git'] },
    #exclude_package_data = { '': ['.git'] },
    #exclude_package_data = { 'commonLib/.git/': ['*'] },
    #exclude_package_data = { '.git': ['*'] },
    ...
)

Обновление № 2

Я опубликовал свой собственный ответ, который выполняет обезьяний патч для distutils. Это уродливо и нежелательно, но пока кто-то не предложит мне лучшее решение, я думаю, это то, что у меня есть.

7
задан jdi 30 March 2012 в 19:39
поделиться