Pyinstaller:运行.exe时找不到模块

时间:2020-08-06 16:03:10

标签: pyinstaller

我有一个问题,我已经简化为一个小程序。该程序尝试编写Pandas数据框。这可以在PyCharm中找到,但是当我使用PyInstaller生成exe时,会在运行时出错:

.\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 

生成的规格文件如下:

# -*- 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 :(得分:1)

原来是由其他环境中运行的PyInstaller引起的。

要解决这个问题,我必须做:

venv\Scripts\activate.bat
(venv) D:\Development\OEM-SR-Rules>pip install PyInstaller