我试图在Windows 7上使用PyInstaller编译一个Python项目。这个项目本身运行得很好,没有问题,但是当我尝试编译它时,结果却不能正常工作。虽然在编译过程中我没有收到任何警告,但在build
目录下的warnmain.txt
文件中有很多警告:warnmain.txt
我实在不理解那些警告,例如“no module named numpy.pi”,因为numpy.pi
不是模块而是一个数字。我从未尝试导入numpy.pi
。我确实导入了numpy
和matplotlib
。此外,我还使用了PyQt4。我认为错误可能与这些库有关。
然而,我能够成功地编译一个使用numpy的简单脚本:
import sys
from PyQt4 import QtGui, QtCore
import numpy as np
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.pb = QtGui.QPushButton(str(np.pi), self)
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
在这里成功意味着创建的可执行文件实际上显示了所需的输出。但是也创建了一个warnmain.txt
文件,其中包含与之前完全相同的“警告”。因此,我想实际项目编译不成功的事实并非(或至少不仅仅)与这些警告有关。那么还可能出现什么错误呢? 编译过程中唯一的输出是“INFO”,没有任何负面声明。
我没有指定额外的挂钩目录,但是从编译输出中读取,钩子使用默认目录下的,例如,hook-matplotlib
被执行。 我看不到任何numpy
挂钩,也不能为我的小例子脚本找到任何挂钩,但这个脚本可以运行。 我在文件中使用了以下导入(不是所有导入都在同一个文件中,而是在不同的文件中):
import numpy as np
import matplotlib.pyplot as ppl
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
from PyQt4 import QtGui, QtCore
import json
import sys
import numpy # added this one later
import matplotlib # added this one later
由于 PyInstaller 没有给出任何错误/警告,我无法判断问题是否与库相关或是否有其他需要考虑的事项。
import numpy.sinh
,会出现ImportError: No module named sinh
的错误提示,只有当我执行import numpy.numpy.sinh
时才会出现ImportError: No module named numpy.sinh
的错误提示。你是否查看过 PyInstaller finding out what went wrong 来获取错误信息、详细导入信息和调试信息? - ThatOneDude-w
(请参见http://pythonhosted.org/PyInstaller/#options-for-the-executable-output),它可以防止Windows为任何输入/输出启动控制台。如果我不使用`-w`编译,则无法获得图形用户界面。但是,当从解释器调用程序时,程序可以正常工作,因此我认为这不是内部错误。 @ssnobody:我知道那个链接,但对我没有任何好处。import numpy.sinh
不起作用,因为sinh
不是模块。 - a_guest-w
的情况下编译并获得GUI。但是如果我这样做,我会得到一个控制台,在那里我可以看到很短的时间(远远不足以实际阅读)有东西被写在那里,但然后应用程序终止。GUI没有出现。我尝试将此stdout以某种方式传输到文件中,以便我可以实际阅读它。 - a_guest