Py2exe: Embed static files in exe file itself and access them

前端 未结 3 950
名媛妹妹
名媛妹妹 2020-12-06 06:34

I found a solution to add files in library.zip via: Extend py2exe to copy files to the zipfile where pkg_resources can load them.

I can access to my file when library

3条回答
  •  青春惊慌失措
    2020-12-06 07:11

    I cobbled together a reasonably neat solution to this, but it doesn't use pkg_resources.

    I need to distribute productivity tools as standalone EXEs, that is, all bundled into the one .exe file. I also need to send out notifications when these tools are used, which I do via the Logging API, using file-based configuration. I emded the logging.cfg fileto make it harder to effectively switch-off these notifications i.e. by deleting the loose file... which would probably break the app anyway.

    So the following is the interesting bits from my 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']}},
    )
    

    Then in the startup code for productivity_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)
        ...
    

    Works a treat!!!

提交回复
热议问题