Мы широко используем py2app на нашем предприятии для производства автономных пакетов .app для простого внутреннего развертывания без проблем с зависимостями.Что-то, что я недавно заметил и понятия не имею, как это началось, это то, что при сборке .app запускается py2app, включающий каталог .git нашей основной библиотеки.
commonLib, например, является нашим корневым пакетом библиотеки python, который является мерзавцем.Под этим пакетом находятся различные подпакеты, такие как база данных, утилиты и т. Д.
commonLib/
|- .git/ # because commonLib is a git repo
|- __init__.py
|- database/
|- __init__.py
|- utility/
|- __init__.py
# ... etc
В данном проекте, скажем, Foo, мы будем выполнять импорт, например from commonLib import xyz
, чтобы использовать наши общие пакеты.Сборка через py2app выглядит примерно так: python setup.py py2app
Итак, недавняя проблема, с которой я сталкиваюсь, заключается в том, что при создании приложения для проекта Foo я вижу, что оно включает в себя все в commonLib / .git /, котороеэто дополнительный раздуваться.В py2app есть опция exclude, но это только для модулей python.Я не могу понять, что нужно сделать, чтобы исключить .git subdir или фактически, что заставляет его быть включенным в первую очередь.
Кто-нибудь испытывал это при использовании импорта пакета python, которыймерзавец репо?В наших файлах setup.py для каждого проекта ничего не изменилось, а commonLib всегда был git-репо.Таким образом, единственное, что я могу думать о том, чтобы быть переменной, - это версия py2app и его приложений, которые, очевидно, были обновлены с течением времени.
Edit
Я используюпоследний 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
У меня естьопубликовал мой собственный ответ, который делает monkeypatch на distutils.Это некрасиво и не предпочитается, но пока кто-то не предложит мне лучшее решение, я думаю, это то, что у меня есть.