py项目工作,但pyinstaller给出了与pulp相关的错误信息。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了py项目工作,但pyinstaller给出了与pulp相关的错误信息。相关的知识,希望对你有一定的参考价值。

我正在做一个用纸浆进行线性优化的项目。当我正常 "运行 "这个文件时,它工作得很好,但当我试图将它转换成一个.exe文件时,我遇到了一些问题,用 pyinstaller.如果我从命令提示符运行.exe文件,都会报错。

Traceback (most recent call last):
  File "price.py", line 116, in <module>
  File "site-packagespulppulp.py", line 1713, in solve
AttributeError: 'NoneType' object has no attribute 'actualSolve'
[9468] Failed to execute script price

代码的一部分,我有一个问题。

#type of problem
group_division = pulp.LpProblem("Group_division", pulp.LpMinimize)

#objective function to minimize
group_division += objectiveFunction(external_groups, internal_groups)

#specify the maximum number of groups
group_division += sum([x[group] for group in external_groups]) <= max_groups,                             
"Maximum_number_of_groups"

#every thickness must appear once 
for cutType in cutTypes:
group_division += oneCutConstraint(x, y, external_groups, internal_groups, cutType) == 
1,"Must_appear_%s"%cutType

#solve the problem    
group_division.solve()
答案

当你从你的python源中使用pulp时,解算器是可用的,因为那个解算器是唯一一个与pulp一起使用的。但是当你运行 pyinstaller 时,它就不再可用了(因为你没有明确告诉 pyinstaller 复制它)。

当用 pyinstaller 打包 pulp 时,你需要告诉 pyinstaller 也要得到 pulp 附带的 CBC 解算器的目录。如果没有,你将只得到python代码,然后你的打包版本将找不到CBC解算器。

假设你有一个 config.spec pyinstaller的文件,你必须把它编辑成类似下面的东西(至少我觉得这样的东西是有效的)。

import sys
import os

block_cipher = None

def get_pulp_path():
    import pulp
    return pulp.__path__[0]

path_main = os.path.dirname(os.path.abspath(sys.argv[2]))

a = Analysis(['MAIN_SCRIPT.py'],
             pathex=[path_main],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)

a.datas += Tree(get_pulp_path(), prefix='pulp', excludes=["*.pyc"])

pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(pyz, a.scripts, exclude_binaries=True, name='NAME', debug=False, strip=False, upx=True, console=True)
coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name='NAME')

然后运行

pyinstaller -y config.spec

以上是关于py项目工作,但pyinstaller给出了与pulp相关的错误信息。的主要内容,如果未能解决你的问题,请参考以下文章

Python利用pyinstaller工具将py文件打包成.exe可执行文件

PyInstaller exe仅与-F选项一起使用

PyInstaller无法创建base_library.zip

使用pyinstaller打包多文件项目成一个exe

用 pyinstaller 打包含xpinyin 库的Python程序

Python虚拟环境下使用Pyinstaller打包