如何使用PyInstaller多个.py?

时间:2017-11-20 19:09:42

标签: python pyqt4 pyinstaller

我试图在Ubuntu 17.10上使用Pyinstaller做一些混合应用程序(Mac,Windos,Linux OS),但是当我这样做时:

pyinstaller XXX.py 

它正确生成所有内容但无法执行程序(使用PyQT4 7 Python2.7制作)。 该程序包含 main.py& file.py& file.ui ,我该怎么做才能测试可执行文件?当我在/ dist或/ build中运行文件时,它没有做任何事情。

LOG

  

82 INFO:PyInstaller:3.3       82 INFO:Python:2.7.14       83信息:平台:Linux-4.13.0-16-generic-x86_64-with-Ubuntu-17.10-artful       83 INFO:写了/home/manel/Documentos/PythonProject/GUI.spec       85信息:UPX不可用。       86 INFO:使用路径扩展PYTHONPATH       [' /家庭/ MANEL /文件/ PythonProject&#39 ;,        ' /家庭/ MANEL /文件/ PythonProject']       86 INFO:检查分析       86 INFO:构建分析因为out00-Analysis.toc不存在       87 INFO:初始化模块依赖图...       88 INFO:初始化模块图钩子......       117 INFO:运行Analysis out00-Analysis.toc       129 INFO:缓存模块挂钩...       131 INFO:分析/home/manel/Documentos/PythonProject/GUI.py       960 INFO:处理预安全导入模块挂钩_xmlplus       2511 INFO:处理预查找模块路径钩子distutils       2834 INFO:处理预查找模块路径挂钩PyQt4.uic.port_v3       2835 INFO:处理预查找模块路径挂钩PyQt4.uic.port_v2       2963 INFO:装载模块挂钩......       2963 INFO:加载模块挂钩" hook-distutils.py" ...       2963 INFO:加载模块挂钩" hook-sysconfig.py" ...       2964 INFO:加载模块挂钩" hook-xml.py" ...       3001 INFO:加载模块挂钩" hook-gtk.py" ...       3002警告:隐藏导入" gtkglext"未找到!       3002警告:隐藏导入" gdkgl"未找到!       3003警告:隐藏导入" gdkglext"未找到!       3003警告:隐藏导入" gtk.gdk"未找到!       3003警告:隐藏导入" gtk.gtkgl"未找到!       3003警告:隐藏导入" gtk.gtkgl._gtkgl"未找到!       3004警告:隐藏导入" gtkgl"未找到!       3046 INFO:加载模块挂钩" hook-lxml.etree.py" ...       3047 INFO:加载模块挂钩" hook-httplib.py" ...       3047 INFO:加载模块挂钩" hook-PyQt4.py" ...       3048 INFO:加载模块挂钩" hook-PyQt4.uic.py" ...       3049 INFO:加载模块挂钩" hook-PyQt4.QtGui.py" ...       3130 INFO:加载模块挂钩" hook-PyQt4.QtSvg.py" ...       3130 INFO:加载模块挂钩" hook-encodings.py" ...       3393 INFO:加载模块挂钩" hook-PyQt4.QtCore.py" ...       3410 INFO:加载模块挂钩" hook-PyQt4.QtXml.py" ...       3417 INFO:寻找ctypes DLL       3474警告:找不到通过ctypes发送的库msvcrt       3474 INFO:分析运行时挂钩...       3477 INFO:包括运行时挂钩' pyi_rth_qt4plugins.py'       3482 INFO:寻找动态库       4831 INFO:寻找鸡蛋       4831 INFO:Python库不是二进制依赖项。做额外的搜索......       4860 INFO:使用Python库/usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0       4869 INFO:写入/home/manel/Documentos/PythonProject/build/GUI/warnGUI.txt的警告       4906 INFO:图形交叉引用写入/home/manel/Documentos/PythonProject/build/GUI/xref-GUI.html       4956信息:检查PYZ       4956 INFO:构建PYZ,因为out00-PYZ.toc不存在       4956 INFO:构建PYZ(ZlibArchive)/home/manel/Documentos/PythonProject/build/GUI/out00-PYZ.pyz       5244信息:建立PYZ(ZlibArchive)/home/manel/Documentos/PythonProject/build/GUI/out00-PYZ.pyz已成功完成。       5279 INFO:检查PKG       5279 INFO:构建PKG因为out00-PKG.toc不存在       5280 INFO:构建PKG(CArchive)out00-PKG.pkg       5294信息:构建PKG(CArchive)out00-PKG.pkg成功完成。       5295 INFO:Bootloader /usr/local/lib/python2.7/dist-packages/PyInstaller/bootloader/Linux-64bit/run       5295 INFO:检查EXE       5296 INFO:构建EXE,因为out00-EXE.toc不存在       5296信息:从out00-EXE.toc构建EXE       5296信息:将存档附加到EXE / home / manel / Documentos / PythonProject / build / GUI / GUI中的ELF部分       5300 INFO:从out00-EXE.toc构建EXE成功完成。       5301信息:检查收集       5301 INFO:构建COLLECT因为out00-COLLECT.toc不存在       5301 INFO:构建COLLECT out00-COLLECT.toc       5394 INFO:建立COLLECT out00-COLLECT.toc已成功完成。

非常感谢

2 个答案:

答案 0 :(得分:1)

可能其中一个文件引发了错误。处理此问题的最佳方法是尝试从命令行运行应用程序。这将显示错误,如果有的话。 只需将终端cd打开到dist目录,然后输入main

即可

答案 1 :(得分:0)

我认为@giantas建议您从终端(或命令提示符)运行.app(或.exe)文件,而不是运行.py文件。 /path/to/app/dist/MyApp.app/Contents/MacOS/MyApp适用于Mac(在终端中),/path/to/app/dist/MyApp.exe适用于Windows(在命令提示符下)。这将允许您观察捆绑应用程序后可能存在的任何错误。

听起来您没有在捆绑包中包含其他数据文件。您可以将其他.py或数据文件添加到PyInstaller .spec文件中的数据列表中,这些文件应该是在第一次在此应用程序上运行PyInstaller时生成的:

....
added_files = [
          ('your_ui_file.ui', '.'),
          ('Icons\\', 'Icons\\')
          ]
a = Analysis(['main.py'],
         pathex=['C:\\Users\\your_name\\wherever\\main.py\\lives'],
         binaries=[],
         datas=added_files,
         hiddenimports=['list.of.hidden.imports'],
....

PyInstaller docs中也对此进行了解释。如果您的主应用程序导入其他.py文件,则不需要将它们包含在datas列表中。

您可能还需要考虑在捆绑过程中保存这些文件的目录。有关如何从可执行文件中正确调用数据文件的更全面的讨论,请查看此post

或者,您可以将.ui文件复制到可执行文件所在的dist目录中。