py2app - В чем разница между переменными include и packages?

Я пытаюсь упаковать программу Linux для Mac OS X, используя py2app. Мой setup.py выглядит так:

"includes": "sip,numpy,cherrypy,cPickle,md5,logging,shutil,xml.sax,PyQt4,PyQt4.QtCore",
"resources": "mnemosyne",
"iconfile": "pixmaps/mnemosyne.icns",
"packages": "mnemosyne,mnemosyne.pyqt_ui,mnemosyne.libmnemosyne,mnemosyne.libmnemosyne.translators,mnemosyne.libmnemosyne.card_types,mnemosyne.libmnemosyne.databases,mnemosyne.libmnemosyne.file_formats,mnemosyne.libmnemosyne.filters,mnemosyne.libmnemosyne.loggers,mnemosyne.libmnemosyne.plugins,mnemosyne.libmnemosyne.renderers,mnemosyne.libmnemosyne.render_chains,mnemosyne.libmnemosyne.schedulers,mnemosyne.libmnemosyne.controllers,mnemosyne.libmnemosyne.ui_components,mnemosyne.libmnemosyne.statistics_pages,mnemosyne.libmnemosyne.review_controllers,mnemosyne.libmnemosyne.criteria,mnemosyne.libmnemosyne.upgrades,mnemosyne.script,mnemosyne.webserver,openSM2sync,openSM2sync.binary_formats,openSM2sync.text_formats"

Но я понял, что могу также включать такие модули:

"includes": "sip,numpy,cherrypy,cPickle,md5,logging,shutil,xml.sax,PyQt4,PyQt4.QtCore,mnemosyne.pyqt_ui.*,mnemosyne.libmnemosyne.*,mnemosyne.libmnemosyne.translators.*,mnemosyne.libmnemosyne.card_types.*,mnemosyne.libmnemosyne.databases.*,mnemosyne.libmnemosyne.file_formats.*,mnemosyne.libmnemosyne.filters.*,mnemosyne.libmnemosyne.loggers.*,mnemosyne.libmnemosyne.plugins.*,mnemosyne.libmnemosyne.renderers.*,mnemosyne.libmnemosyne.render_chains.*,mnemosyne.libmnemosyne.schedulers.*,mnemosyne.libmnemosyne.controllers.*,mnemosyne.libmnemosyne.ui_components.*,mnemosyne.libmnemosyne.statistics_pages.*,mnemosyne.libmnemosyne.review_controllers.*,mnemosyne.libmnemosyne.criteria.*,mnemosyne.libmnemosyne.upgrades.*,mnemosyne.script.*,mnemosyne.webserver.*,openSM2sync.*,openSM2sync.binary_formats.*,openSM2sync.text_format.*",
"resources": "mnemosyne",
"iconfile": "pixmaps/mnemosyne.icns",

Я не кодер, поэтому я не очень понимаю, что здесь происходит. Когда я должен использовать «включает» и когда я должен использовать «пакеты»?


person Patrick Kenny    schedule 17.06.2012    source источник


Ответы (2)


Вам не нужно явно называть все, что вы импортировали, в поле include. py2app имеет обходчик зависимостей, который сможет сказать, что вы использовали, и автоматически связать это для вас. Это не всегда работает для каждого модуля, поэтому include и exclude нужны для точной настройки процесса. exclude используется, если py2app объединяет некоторые дополнительные биты, которые вы не используете; вы можете разархивировать Contents/Resources/lib/pythonX.X/site-packages.zip, чтобы увидеть, что включено в приложение.

Также я считаю, что include предназначен для включения дополнительных модулей Python, которые не были включены автоматически, тогда как packages будет включать все в этом месте, а не только биты Python, а также все файлы и типы файлов в этих местах. (Я не могу найти ссылку или что-либо, чтобы подтвердить это, но из своего опыта я это понимаю).

person GP89    schedule 18.06.2012
comment
Добавление нашего пакета в packages не включало текстовые файлы, по-видимому, он не включает все типы файлов. - person Michiel Kauw-A-Tjoe; 18.12.2014
comment
@MichielKauw-A-Tjoe Я думаю, вам нужно datafiles для включения других типов файлов, изображений/текстовых файлов и т. д. - person GP89; 18.12.2014
comment
Аргумент data_files (с подчеркиванием) добавляет файлы, но не добавляет файлы, отличные от Python, внутрь пакета и не копирует весь путь, по которому находятся файлы, что мне и нужно. Вместо этого папка, на которую он указывает, копируется в Resources рядом с lib, где хранятся пакеты. Спасибо, в любом случае! - person Michiel Kauw-A-Tjoe; 19.12.2014

Они должны использоваться для модулей и пакетов соответственно, так сказано в справочнике по параметрам py2app:

https://pythonhosted.org/py2app/options.html

Где пакеты — это «имена модулей с точками» в соответствии с http://www.network-theory.co.uk/docs/pytut/Packages.html (ссылка в этом разделе: В чем разница между модулем Python и пакетом Python?).

person Michiel Kauw-A-Tjoe    schedule 18.12.2014
comment
Очередь редактирования заполнена: но для ясности: *Include* следует использовать для модулей, *packages* следует использовать для пакетов. - person multithr3at3d; 27.06.2021