2

Python スクリプトの実行可能ファイルを作成するために PyInstaller をインストールしましたが、問題なく動作します。PyPandoc を使用して.docxレポートを作成しました。これは、通常の python ファイルが実行されたときにも正常に実行されますが、PyInstaller によって生成された実行可能ファイルからではありません。エラーが発生します:

Traceback (most recent call last):
  File "src\flexmodel_postcalc.py", line 295, in postcalculate_everything
  File "src\flexmodel_postcalc.py", line 281, in generate_report_docx
  File "src\flexmodel_report_docx.py", line 118, in generate_text_useages_docx
  File "pypandoc\__init__.py", line 50, in convert
  File "pypandoc\__init__.py", line 70, in _convert
  File "pypandoc\__init__.py", line 197, in get_pandoc_formats
  File "pypandoc\__init__.py", line 336, in _ensure_pandoc_path
OSError: No pandoc was found: either install pandoc and add it
to your PATH or install pypandoc wheels with included pandoc.

実行可能ファイルの作成中に、PyPandoc に関する奇妙な問題は見られません。実行可能ファイルに Pandoc を含めて、(Python や Pandoc をインストールしていない) 他のユーザーが実行可能ファイルを使用して.docxレポートを作成できるようにするにはどうすればよいですか?

編集: 作業プロセスには次の手順が含まれていました:

  1. 次のコードを含むファイルを作成します。

    import pypandoc
    pypandoc.convert(sou‌​rce='# Sample title\nPlaceholder', to='docx', format='md', outputfile='test.doc‌​x')
    
  2. このファイルを名前を付けて保存pythonfile.py

  3. PyInstaller で実行可能ファイルを作成します。

    pyinstaller --onefile --clean pythonfile.py
    
  4. これで、実行可能ファイルは、Pandoc (または PyPandoc) がインストールされていないコンピューターで実行されるはずです。

4

1 に答える 1

4

ここには 2 つの問題があります。最初のものは、それが機能pypandocする必要があるということpandoc.exeです。これは自動的に取得されませんがpyinstaller、手動で指定できます。

これを行うには、ファイルを作成する.spec必要があります。私が生成して使用したものは次のようになります。

block_cipher = None

a = Analysis(['pythonfile.py'],
             pathex=['CodeDIR'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='EXEName',
          debug=False,
          strip=False,
          upx=True,
          console=True , 
          resources=['YourPandocLocationHere\\\\pandoc.exe'])

を使用して実行可能ファイルをビルドできますpyinstaller myspec.specnameパスとパラメータを変更することを忘れないでください。

ディレクトリ モードでビルドする場合は、これで十分です。ただし、このモードでは、pyinstallerブートローダー プロセスone-fileの動作方法が原因で、状況が少し複雑になります。ファイルは一時フォルダーでの実行中に解凍されますが、実行は元のフォルダーで行われます。この質問によれば、凍結されたコードを実行する場合、pypandoc を呼び出して現在のフォルダーを変更する前に、次の行をコードに追加する必要があります。pandoc.exe.exe

if hasattr(sys, '_MEIPASS'):
    os.chdir(sys._MEIPASS)
于 2016-08-15T14:54:48.573 に答える