Search code examples
pythonpython-3.xpyinstallerpython-pptx

Is there a way to use pptx-python with python verion 3.7 and make exe with pyinstaller?


ppt.py:

from pptx import Presentation

newPPT = Presentation()

newPPT.save("MyPPT.pptx")

converting to exe: cmd == pyinstaller --onefile ppt.py

once ready, the error is:

exception pptx.exc.PackageNotFoundError Raised when a package cannot be found at the specified path.

in the pptx package's doc.

is there a way to make it possible?

Thanks


Solution

  • I had the same issue and finally figured how to fix it based on a similar issue: https://github.com/python-openxml/python-docx/issues/289

    The solution is to edit the spec file. To generate the spec file (if you don't have one already) run:

    pyi-makespec --onefile yourprogram.py
    

    open and edit the sepc file:

    # -*- mode: python ; coding: utf-8 -*-
    import sys # added line
    from os import path # added line
    site_packages = next(p for p in sys.path if 'site-packages' in p) # added line
    
    block_cipher = None
    
    # add in template in datas
    a = Analysis(['your_file.py'],
                 pathex=['C:\\Users\\Desktop'],
                 binaries=[],
                 datas=[(path.join(site_packages,"pptx","templates"), "pptx/templates")],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    # rest of the file doesn't need any modification
    

    Finally generate the exe with:

    pyinstaller your_spec_file.spec
    

    (Tested on windows 10 machine running python 3.6.4)