Python运行正常但exe不行。AttributeError
我遇到的错误是:
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1487, in __call__
return self.func(*args)
File "interface.py", line 231, in testsubmit
File "interface.py", line 202, in optimizations
File "C:\Python34\lib\site-packages\pulp-1.5.6-py3.4.egg\pulp\pulp.py", line 1619, in solve
status = solver.actaualSolve(self,**kwargs)
AttributeError: 'NoneType' object has no attribute 'actualSolve'
我在Windows上使用的是Python 3.4的py2exe。我可以在Python中运行相同的代码,但是在转换成.exe文件后,它无法运行,并且出现了上面的错误信息。在从.py转换为.exe的过程中没有出现错误。这个代码是用Tkinter制作图形界面的,同时还使用了pulp进行线性优化。有没有人知道这是为什么呢?代码的一部分:
from tkinter import *
from tkinter.ttk import *
from pulp import *
class Gui(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def optimizations(self):
numberEzroofmtg, lngths, wdths, hghts = self.lengthsEzmtg()
prob = pulp.LpProblem('the simple problem', LpMinimize)
self.indices = ['206_rail','164_rail','124_rail','84_rail']
self.x = pulp.LpVariable.dict("x_%s", self.indices,lowBound =0, cat = LpInteger)
# length data
self.lengths = dict(zip(self.indices, [206, 164, 124, 84]))
prob += sum([self.x[i]*self.lengths[i] for i in self.indices]) >= lngths
prob += self.x['124_rail'] <= 1
prob.solve()
return int(self.x['164_rail'].value())*2, int(self.x['124_rail'].value())*2
self.quit()
def testsubmit(self):
Rails_164, Rails_124 = self.optimizations()
self.entries['Number of Helio Std. Rail (L=164)'].delete(0,END)
self.entries['Number of Helio Std. Rail (L=164)'].insert(0, Rails_164 )
1 个回答
1
看起来pulp模块找不到可用的求解器。根据我的了解,它需要用到一些外部的DLL文件和命令来进行求解,而py2exe并不知道这些文件的存在,所以没有把它们包含进去。你需要在你的setup.py
脚本中明确告诉py2exe你正在使用这些文件,可能需要用到dist-file
这个关键词。