导入熊猫文件时exe文件无法运行

时间:2019-08-17 10:54:39

标签: python pandas numpy exe

exe文件启动,但以ModuleNotFoundError: No module named 'numpy.random.common'

崩溃

我使用pyinstaller --onefile hello.py --hidden-import pandas和 .exe文件失败。 我试图通过添加路径到pandas来更改规格文件 ,但.exe文件仍然失败。

hello.py 文件的内容:

import os
input("before loading pandas")
import pandas
print ("hello")
input('waiting for keyboard input')

规范文件的内容:

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

block_cipher = None

def get_pandas_path():
    import pandas
    pandas_path=pandas.__path__[0]
    return pandas_path


a = Analysis(['CreateExcelSAList.py'],
             pathex=['D:\\OneDrive - Ardovlam NV\\15. Python\\hello'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
dict_tree=Tree(get_pandas_path(),prefix='pandas',excludes=["*.pyc"])
a.datas+=dict_tree
a.binaries=filter(lambda x:'pandas' not in x[0], a.binaries)

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='hello',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )
scoll=COLLECT(exe,
            a.binaries,
            a.zipfiles,
            a.datas,
            strip=None,
            upx=True,
            name='hello')

2 个答案:

答案 0 :(得分:0)

似乎是一个已知的错误。请检查:https://github.com/numpy/numpy/issues/14163。在stackoverflow中有一个解决方案的参考。

答案 1 :(得分:0)

我有解决方案,在这里找到 In PyInstaller, Why Won't NumPy.Random.Common Load as a Module?

在我将hello.py中导入熊猫之前,我已经在下面导入了东西

import numpy.random.common
import numpy.random.bounded_integers
import numpy.random.entropy

运行pyinstaller hello.py后,我的exe文件正在按预期运行

在另一个程序中,导入numpy库是不够的,我还必须使用“ hiddenimports”更改xx.spec文件。

hiddenimports=['numpy.random.common','numpy.random.entropy','numpy.random.bounded_integers'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
         noarchive=False)