Pyinstaller: модуль не найден при запуске .exe - PullRequest
1 голос
/ 06 августа 2020

У меня есть проблема, которую я свел к небольшой программе. Программа пытается записать фрейм данных Pandas. Это работает в PyCharm, но когда я создаю exe с помощью PyInstaller, он выдает ошибки во время выполнения:

.\pyinst_excel.exe
Traceback (most recent call last):
  File "pyinst_excel.py", line 31, in <module>
  File "pyinst_excel.py", line 25, in add_generated_files_row
  File "site-packages\pandas\io\excel\_openpyxl.py", line 18, in __init__
ModuleNotFoundError: No module named 'openpyxl'
[11408] Failed to execute script pyinst_excel

Теперь я попытался явно импортировать openpyxl, и это не сработало, и я также использовал --hidden-import:

call venv\Scripts\activate    
pyinstaller  --onefile --hidden-import _openpyxl --hidden-import openpyxl --clean  pyinst_excel.py 

Сгенерированный файл spe c выглядит следующим образом:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['pyinst_excel.py'],
             pathex=['D:\\Development\\OEM-SR-Rules'],
             binaries=[],
             datas=[],
             hiddenimports=['_openpyxl', 'openpyxl'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='pyinst_excel',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )

Однако это не решает проблему. Из файла сборки / предупреждений я вижу:

...
missing module named openpyxl - imported by pandas.io.excel._openpyxl (delayed, conditional), D:\Development\OEM-SR-Rules\pyinst_excel.py (top-level)
...
missing module named 'openpyxl.styles' - imported by pandas.io.excel._openpyxl (delayed)
missing module named 'openpyxl.style' - imported by pandas.io.excel._openpyxl (delayed)

Программный код:

import argparse
from operator import attrgetter
import os
import sys
import json
import pandas as pd
import numpy as np
from pathlib import Path
import glob
import re
import time
from sys import exit
from shutil import copyfile

REPORT_DATE_FMT = '%d-%m-%Y %H.%M'


def add_generated_files_row(generated_excel, sequence: int, date_generated):
    # gen_files_df = pd.read_excel(generated_files_excel, index_col=0)

    gen_files_df = pd.DataFrame(columns=['Sequence', 'Date Generated'])
    new_row = {'Sequence': sequence,
               'Date Generated': date_generated}
    gen_files_df = gen_files_df.append(new_row, ignore_index=True, sort=False)
    writer = pd.ExcelWriter(generated_excel)
    gen_files_df.to_excel(writer)


generated_files_excel = Path('D:\temp\test.xlsx')
date_generated = time.strftime(f"{REPORT_DATE_FMT}")
add_generated_files_row(generated_files_excel, 1, date_generated)

Я использую Python 3.8 и PyInstaller 3.6.

Меня нет идей. Любая помощь будет принята с благодарностью.

Спасибо,

Клайв

1 Ответ

0 голосов
/ 18 августа 2020

Проблема оказалась из-за того, что PyInstaller запускался из другой среды.

Чтобы решить эту проблему, мне пришлось сделать:

venv\Scripts\activate.bat
(venv) D:\Development\OEM-SR-Rules>pip install PyInstaller
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...