如何使用pyinstaller和scipy.optimize leastsq的隐藏导入

时间:2016-01-28 11:39:56

标签: python scipy pyinstaller

我的wxpython应用程序使用pyinstaller编译正常,直到添加了基于from scipy.optimize import leastsq语句的某些功能。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:10)

首次在cmd中运行命令pyinstaller myscript.py时,将创建一个myscript.spec文件(或者您可以手动创建它)。 这个文件允许你指定隐藏的导入,我发现(通过漫长而乏味的试错过程)以下隐藏的导入功能:

'scipy.special._ufuncs_cxx'
'scipy.linalg.cython_blas'
'scipy.linalg.cython_lapack'
'scipy.integrate'
'scipy.integrate.quadrature'
'scipy.integrate.odepack'
'scipy.integrate._odepack'
'scipy.integrate.quadpack'
'scipy.integrate._quadpack'
'scipy.integrate._ode'
'scipy.integrate.vode'
'scipy.integrate._dop'
'scipy.integrate.lsoda'

这些应该通过钩子联系起来,但我无法理解如何,所以这就是"快速和肮脏的"方式。

现在执行pyinstaller myscript.spec

我的完整文件看起来是这样的:

# -*- mode: python -*-
a = Analysis(['myscript.py'],
             pathex=['C:\\SourceCode'],
             hiddenimports=['scipy.special._ufuncs_cxx',
                            'scipy.linalg.cython_blas',
                            'scipy.linalg.cython_lapack',
                            'scipy.integrate',
                            'scipy.integrate.quadrature',
                            'scipy.integrate.odepack',
                            'scipy.integrate._odepack',
                            'scipy.integrate.quadpack',
                            'scipy.integrate._quadpack',
                            'scipy.integrate._ode',
                            'scipy.integrate.vode',
                            'scipy.integrate._dop',
                            'scipy.integrate.lsoda'],
             hookspath=None,
             runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='myscript.exe',
          debug=False,
          strip=None,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=None,
               upx=True,
               name='myscript')