Я собрал достаточно аккуратное решение для этого, но он не использует pkg_resources.
Мне нужно распространять инструменты повышения производительности в виде отдельных EXE-файлов, то есть все они объединены в один файл .exe. Мне также нужно отправлять уведомления об использовании этих инструментов, что я делаю через API ведения журнала, используя конфигурацию на основе файлов. Я добавил файл logging.cfg, чтобы затруднить эффективное отключение этих уведомлений, т. Е. Путем удаления потерянного файла ... который, возможно, все равно сломал бы приложение.
Итак, вот интересные биты из моего setup.py:
LOGGING_CFG = open('main/resources/logging.cfg').read()
setup(
name='productivity-tool',
...
# py2exe extras
console=[{'script': productivity_tool.__file__.replace('.pyc', '.py'),
'other_resources': [(u'LOGGINGCFG', 1, LOGGING_CFG)]}],
zipfile=None,
options={'py2exe': {'bundle_files': 1, 'dll_excludes': ['w9xpopen.exe']}},
)
Тогда в коде запуска для performance_tool.py:
from win32api import LoadResource
from StringIO import StringIO
from logging.config import fileConfig
...
if __name__ == '__main__':
if is_exe():
logging_cfg = StringIO(LoadResource(0, u'LOGGINGCFG', 1))
else:
logging_cfg = 'main/resources/logging.cfg'
fileConfig(logging_cfg)
...
Работает угощение !!!