python - 如何使用 Pyinstaller 将包含 Pyomo、GLPK、IPOPT 的 Python 脚本转换为单个 exe 应用程序
问题描述
我正在尝试构建一个解决线性规划问题的程序。我决定使用 pyomo 作为包,使用 glpk 和 ipopt 作为优化器。我需要将我的 Python 脚本转换为单个 exe 文件。我使用了 Pyinstaller 但有错误
pyomo.common.errors.ApplicationError: No executable found for solver 'ipopt'
我如何将 glpk 和 ipopt 求解器与我的 Python 脚本一起包含到单个 exe 文件中。
谢谢
解决方案
我还没有为单个 exe 应用程序尝试过,但是对于 PyInstaller 的一种目录模式,有一个可行的解决方案。
首先,您应该在 pyomo 优化设置中指定求解器可执行文件的路径
opt = pyomo.SolverFactory('ipopt', executable='ipopt.exe')
对于这种情况pyomo
,将在您的当前目录中寻找求解器可执行文件,同时运行您的 Python 脚本。
其次,您可以通过
PyInstaller
.编译完成后,将求解器可执行文件粘贴到包含
.exe
文件的目录中。
如果您要将代码编译成单个.exe
文件,您可以重复这些步骤并将脚本编译成单个.exe
. 它应该与放置在单个应用程序文件的同一目录中的求解器可执行文件一起使用。
但是,如果您要将代码编译成单个.exe
文件而没有任何其他辅助文件,您可以尝试使用.spec
包含 PyInstaller 设置的文件。如果你有那个文件,它可能看起来像
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['your_script.py'],
pathex=['path_to_your_script'],
binaries=[],
datas=[('vcomp140.dll', '.')],
hiddenimports=['pkg_resources.py2_warn','pyomo.common.plugins','pyomo.repn.util',
'pyomo.opt.plugins',
'pyomo.core.plugins',
'pyomo.dataportal.plugins',
'pyomo.duality.plugins',
'pyomo.checker.plugins',
'pyomo.repn.plugins',
'pyomo.pysp.plugins',
'pyomo.neos.plugins',
'pyomo.solvers.plugins',
'pyomo.gdp.plugins',
'pyomo.mpec.plugins',
'pyomo.dae.plugins',
'pyomo.bilevel.plugins',
'pyomo.scripting.plugins',
'pyomo.network.plugins',
'pandas._libs.skiplist'
],
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,
[],
exclude_binaries=True,
name='your_script',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='your_script')
因此,您可以尝试将求解器可执行文件通过data
参数添加到 PyInstaller 导入中Analysis
推荐阅读
- html - 如果单词内容增加,如何到达p标签的下一行
- ios - SwiftUI 中的平面导航最佳实践
- sql - T-SQL:执行批处理时出错。错误消息是:从 MyTable 中选择 * 的算术溢出
- java - 无法使用 Microsoft SQL Server 和 Javax.Persistence 解析 Java 中的列 [名称]
- java - Failsafe 插件在 CI 上随机崩溃
- python - 根据不同的列名加入两个 dfs?
- typescript - 为什么'let'声明符号将转换为 TypeScript 中的字符串索引签名?
- actions-on-google - Google 模拟器上的操作“无法取消关联帐户”错误
- angular - next(null) 不适用于 BehaviourSubject
- pandas - Groupby sum,根据条件计算数量并在pandas中连接