使用带有 --onefile 标志的 PyInstaller,我可以成功地将以下脚本构建到 .exe 中:
import sys
from PyQt4 import QtGui
class Example(QtGui.QMainWindow):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.statusBar().showMessage('Ready')
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Statusbar')
self.show()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
我在构建时收到以下警告:(为了便于阅读,我使用“PYINSTALLERDIR”替换完整路径,即“C:\Users\name\Downloads\pyinstaller-pyinstaller-v2.0-544-g337ae69\pyinstaller-pyinstaller- 337ae69\"。
PYINSTALLERDIR>pyinstaller.py --onefile --log-level=WARN MainWindowHello.py
1306 WARNING: library python%s%s required via ctypes not found
1468 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable
2957 WARNING: library python%s%s required via ctypes not found
但输出的 14 MB .exe 运行良好并显示 Qt 窗口。但是,当我尝试添加 pandas、matplotlib 或 sklearn 时,我遇到了 Qt 问题。
在我的脚本的第 3 行添加import matplotlib
或添加import sklearn
在构建时会给我这些警告:
PYINSTALLERDIR>python pyinstaller.py --onefile --log-level=WARN MainWindowHello.py
1371 WARNING: library python%s%s required via ctypes not found
1528 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable
3051 WARNING: library python%s%s required via ctypes not found
27108 INFO: Adding Microsoft.VC90.MFC to dependent assemblies of final executable
33329 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
当我尝试运行生成的 .exe(matplotlib 为 44 MB,sklearn 为 87 MB)时,没有显示 Qt 窗口并且我收到以下错误消息:
WARNING: file already exists but should not: C:\Users\name\AppData\Local\Temp\_MEI75002\Include\pyconfig.h
Traceback (most recent call last):
File "<string>", line 2 in <module>
File "PYINSTALLERDIR\PyInstaller\loader\pyi_importers.py", line 409, in load_module
ImportError: could not import module 'PySide.QtCore'
在import pandas
第 3 行,我得到了相同的警告(以及关于 libzmq.pyd 的警告,但我已经在工作程序中更早地得到了它们)。当我尝试运行 119 MB .exe 时,程序崩溃并抛出以下错误:
WARNING: file already exists but should not: C:\Users\name\AppData\Local\Temp\_MEI85162\include\pyconfig.h
Sub class of QObject not inheriting QObject!? Crash will happen when using Example.
我已经尝试过 PyInstaller 2.0 和 dev 版本。使用默认的 --onedir 而不是 --onefile 时,所有三种方案都可以正常工作。谁能帮我弄清楚使用 --onefile 时出了什么问题?
更新:我尝试在 PyInstaller 2.1 中使用 pandas 进行构建,但在使用 --onefile 时仍然出现相同的错误。同样,不使用 --onefile 时一切正常。