2

モジュール「pptx」(パワーポイントの編集と操作)を使用するPythonプログラムに取り組んでいます。プログラムはインタープリターで問題なく動作しますが、.exe ファイル (cx_freeze または py2exe でビルド) として起動すると、メイン ボタンをクリックすると次のエラー メッセージが表示されます。

Exception in Tkinter callback
Traceback (most recent call last):
File "Tkinter.pyc", line 1470, in __call__
File "pptx_02.py", line 187, in ButtonErstellen
File "pptx\api.pyc", line 29, in __init__
File "pptx\presentation.pyc", line 87, in __init__
File "pptx\presentation.pyc", line 170, in __open
File "pptx\packaging.pyc", line 88, in open
File "pptx\packaging.pyc", line 671, in __new__
PackageNotFoundError: Package not found at 'C:\Users\Moi\Programmation\Python\build\exe.win32-2.7\library.zip\pptx\templates\default.pptx' 

問題は、ファイル「default.pptx」が実際にこのアドレスに存在することです。

「pptx」の機能を調べているうちに、この問題の理由について考えが浮かんだかもしれません (ただし、解決策はわかりません)。最後のエラー: File "pptx\packaging.pyc", line 671, in new
は次のコードです:

class FileSystem(object):
    """
    Factory for filesystem interface instances.

    A FileSystem object provides access to on-disk package items via their URI
    (e.g. ``/_rels/.rels`` or ``/ppt/presentation.xml``). This allows parts to
    be accessed directly by part name, which for a part is identical to its
    item URI. The complexities of translating URIs into file paths or zip item
    names, and file and zip file access specifics are all hidden by the
    filesystem class. |FileSystem| acts as the Factory, returning the
    appropriate concrete filesystem class depending on what it finds at *path*.
    """
    def __new__(cls, file):
        # if *file* is a string, treat it as a path
        if isinstance(file, basestring):
            path = file
            if is_zipfile(path):
                fs = ZipFileSystem(path)
            elif os.path.isdir(path):
                fs = DirectoryFileSystem(path)
            else:
                raise PackageNotFoundError("Package not found at '%s'" % path)
        else:
            fs = ZipFileSystem(file)
        return fs

問題は、最終ファイル (default.pptx) が zip ではなく、zip に含まれている可能性があります。しかし、どうすれば修正できるのか、それが本当に問題なのかはわかりません。

もし誰かがアイデアとして...

ありがとうございました !

4

0 に答える 0