繁体   English   中英

使用带有pyinstaller的statsmodel时出错

[英]Error when using statsmodels with pyinstaller

我遇到了PyInstaller和statsmodels问题。 当我运行可执行文件时,我收到错误ImportError: No module named 'statsmodels.__init__.tools' ,当我直接用Python运行代码时,一切正常。

我试过这个解决方案

它适用于tools模块,但我有另一个错误: __init __._版本

我尝试添加statsmodelsstatsmodels.__init__statsmodels.__init__._version ,但它也没有用。

statsmodelsstatsmodels的复杂模块之一,因为它依赖于其他一些模块,它们会混淆PyInstaller导入图。 我的解决方案可能看起来不是优化但可以完成工作。

hidden-imports只会告诉PyInstaller查找该模块,但有时它无法跟踪模块依赖(如DLL,外部py文件等)。 所以对于statsmodels来说它无济于事。

整个过程是首先告诉PyInstaller不要使用exclude-module跟踪statsmodels ,并手动将模块提供给最终的可执行文件。 此外,我们需要将一些模块(如numpypandas等)与Tree类捆绑在一起。

我正在使用Python 3.7.4和最新的PyInstaller 3.5。 假设以下示例来自官方文档

import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
dat = sm.datasets.get_rdataset("Guerry", "HistData").data
results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=dat).fit()
print(results.summary())

使用下面的spec文件(我在脚本旁边使用Python的名为envvenv

# -*- mode: python -*-

block_cipher = None


a = Analysis(['script.py'],
             pathex=['<root_project_path>'],
             binaries=[],
             datas=[],
             hiddenimports=['six', 'fractions', 'csv', 'pytz', 'timeit'],
             hookspath=[],
             runtime_hooks=[],
             excludes=['statsmodels'],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
a.datas += Tree("./env/Lib/site-packages/statsmodels", prefix="statsmodels")
a.datas += Tree("./env/Lib/site-packages/numpy", prefix="numpy")
a.datas += Tree("./env/Lib/site-packages/pandas", prefix="pandas")
a.datas += Tree("./env/Lib/site-packages/scipy", prefix="scipy")
a.datas += Tree("./env/Lib/site-packages/dateutil", prefix="dateutil")
a.datas += Tree("./env/Lib/site-packages/patsy", prefix="patsy")

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

最后生成您的可执行文件:

pyinstaller script.spec

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM