如何使用SqueezeTool中的所有依赖项来分发我的Python 3.6应用程序

时间:2018-05-02 19:50:54

标签: python-3.x tensorflow keras kivy software-distribution

我有一个python应用程序,我在Kivy上为GUI构建,我将该文件与RNN模型分开。我只是直接导入该文件:

from keras_network import Network

我尝试使用官方技巧来使用pyinstaller进行部署,但是在运行生成的最终.exe文件时,由于我的应用程序崩溃,这不起作用。我甚至对.spec文件进行了适当的更改 是不是有更简单的方法在Python 3.6中打包这个应用程序? (比如SqueezeTool,它太老了,并且不能在Python 3.6中工作)

我可以将python文件编译为.pyc文件并将所有依赖关系静态链接吗?当Python如此受欢迎时,为什么这仍然是一个巨大的痛苦?

1 个答案:

答案 0 :(得分:0)

好的......我终于开始工作了。 在PyQt5中实现整个项目之后,我尝试用PyInstaller打包它时想出了这个解决方案。

以下是我如何使用它(对于以后可能遇到任何问题的人):

  1. 使用过python 3.5
  2. 安装适用于MSVC 2015应该使用的一些丢失文件的Windows 10 SDK。
  3. 从以下位置安装dev版本PyInstaller:
    pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip --upgrade
  4. 使用该命令包含我的数据文件,以及包含隐藏的导入h5py:

    pyinstaller --add-data keras_model.h5;。 --add-data TrainingData.txt;。 --hidden-import = h5py --hidden-import = h5py.defs --hidden-import = h5py.utils --hidden-import = h5py.h5ac --hidden-import = h5py._proxy project-name.py

  5. 然后编辑生成的.spec文件。在评论之后,在文件开头添加了“来自kivy.deps import sdl2,glew”而没有引号。还添加了“* [Tree(p)for p in(sdl2.dep_bins + glew.dep_bins)],”没有COLLECT()函数调用中的引号作为第6个参数。
  6. 然后使用以下命令使用.spec文件重建:

    pyinstaller --add-data keras_model.h5;。 --add-data TrainingData.txt;。 --hidden-import = h5py --hidden-import = h5py.defs --hidden-import = h5py.utils --hidden-import = h5py.h5ac --hidden-import = h5py._proxy project-name.spec

    然后构建的应用程序的可执行文件出现在'dist \ project-name \'目录中。双击应用程序可以使应用程序完美执行。

    希望这可以帮助任何人停留在同一个地方。