PyInstaller坚持打造PKG ......"导出单个.exe时

时间:2018-03-13 14:40:13

标签: python compilation kivy pyinstaller

我写了一个kivy程序,我想通过pyinstaller导出到单个.exe文件中。我设法导出到多个文件(标准选项)但是当我向pyinstaller添加--onefile选项时,该过程卡在一行上说:

    INFO: Building PKG (CArchive) out00-PKG.pkg

有谁知道如何解决?只是时间问题,还是我在出口过程中遗漏了什么?

我的项目:

我正在使用python 3.6.4,kivy 1.9.0和pyinstaller 3.3.1。 main.py和main.kv文件(我使用的只有2个文件)都在同一个文件夹中,从现在开始我称之为\ project_folder \。在同一文件夹中还有一个名为icon.ico的图标。

我也在使用UPX(upx394a),它被下载到名为\ upx_path \ upx394a的文件夹中。

首先,我用:

修改了我的main.py文件
import kivy
import sys
import os

...

def resourcePath():
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS)
    return os.path.join(os.path.abspath("."))

...

if __name__=='__main__':
    kivy.resources.resource_add_path(resourcePath())
    MainApp().run()

对于导出我运行Windows提示符;我移动到\ project_folder \然后导出:

    pyinstaller main.py --onefile --clean -y --windowed --icon=icon.ico 
    --name MyApp --upx-dir=\upx_path\upx394a --exclude-module _tkinter 
    --exclude-module Tkinter --exclude-module enchant --exclude-module twisted

我发现这个选项: Kivy: compiling to a single executable

以这种方式成功创建.spec文件后,我继续修改.spec文件以正确创建.exe:

1

from kivy.deps import sdl2, glew
  1. " EXE(pyz,"我添加:

    树(' \ ... \ percorso dove si trova il file main.py \'),

  2. " a.datas,"在下一行我添加:

    * [p(p)for p in(sdl2.dep_bins + glew.dep_bins)],

  3. 然后我保存.spec文件并从提示符运行:

    python -m PyInstaller MyApp.spec
    

    在这里,在提示符输出后,pyinstaller卡住了。我试过等了一段时间但没有任何反应。

    **我的代码:**

    在这里,我粘贴我正在使用的代码,希望它有所帮助: 1. main.py

    # python 3.6.4
    
    from kivy.config import Config 
    Config.set('input', 'mouse', 'mouse, multitouch_on_demand')
    # set non resizable window, specify heigth and width
    Config.set('graphics', 'resizable', False)
    Config.set('graphics', 'width', '800')
    Config.set('graphics', 'height', '600')
    Config.set('graphics', 'borderless', False)
    
    import kivy
    import sys
    import os
    from kivy.app import App
    from kivy.uix.floatlayout import FloatLayout
    
    # la funzione definita di seguito serve per esportazione in .exe
    def resourcePath():
        if hasattr(sys, '_MEIPASS'):
            return os.path.join(sys._MEIPASS)
        return os.path.join(os.path.abspath("."))
    
    class RootWidget(FloatLayout):
        pass
    
    class MainApp(App):
        def build(self):
            return RootWidget()
    
    if __name__=="__main__":
        kivy.resources.resource_add_path(resourcePath()) # add this line
        MainApp().run()
    
    1. main.kv

      # File name: main.kv
      #:kivy 1.9.0
      
      #:set logo_image 'logo_1.png'
      <CreditLabel@Label>:    # custom class for credits window labels
      size_hint: [.4, .1]
      color: 1, 1, 1, 1
      
      <RootWidget>:
      TabbedPanel:
          do_default_tab: False
          tab_width: self.parent.width/5
          background_color: 0, 0, 0, 1
      
          TabbedPanelItem:
              text: 'Benvenuto!'
              color: 1, 0.5, 0, 1
              FloatLayout:
                  Label:
                      size_hint: .4, .25
                      pos_hint: {'center_x': 0.5, 'center_y': 0.7}
                      text: 'Benvenuto in MyBaku!'
                      font_size: 40
                      color: 1, 0.5, 0, 1
      
                  Label:
                      size_hint: .6, .25
                      pos_hint: {'center_x': 0.5, 'center_y': 0.55}
                      text: 'Bentornato Gianpietro! Prenditi il tuo tempo per visualizzare le tue statistiche.'
                      font_size: 18
                      color: 1, 1, 1, 1
                  Label:
                      canvas:
                          Rectangle:
                              size: 80, 80
                              pos: self.right - (self.width * 0.15), self.top * 0.8 
                              source: logo_image
      
          TabbedPanelItem:
              text: 'Questa notte...'
              color: 1, 0.5, 0, 1
              FloatLayout:
      
          TabbedPanelItem:
              text: 'Statistiche globali'
              color: 1, 0.5, 0, 1
              FloatLayout:
      
          TabbedPanelItem:
              text: 'Credits'
              color: 1, 0.5, 0, 1
              FloatLayout:
                  Label:
                      canvas:
                          Rectangle:
                              #:set coefficient .3
                              size: self.width * coefficient, self.width * coefficient
                              pos: self.center_x - (self.width * coefficient)/2, self.top * 0.5 
                              source: logo_image
                  CreditLabel:
                      text: 'Software developed by Giampo (dev 0.1)'
                      pos_hint: {'center_x': .5, 'center_y': .45}
                  CreditLabel:
                      text: 'Written with Python 3.6.4 using kivy 1.9.0'
                      pos_hint: {'center_x': .5, 'center_y': .40}
                  CreditLabel:
                      text: 'Trento (Italy) - march 2018'
                      pos_hint: {'center_x': .5, 'center_y': .35}
      
    2. 附上卡住提示的屏幕截图 prompt problem screenshot

2 个答案:

答案 0 :(得分:3)

我遇到了相同的问题,使用相同的“ INFO:”。我忘了以管理员身份运行cmd ...以这种方式运行后,它能够完成转换。

答案 1 :(得分:0)

尝试删除现有的build和dist目录,看看是否可以解决问题,该解决方案对我有用,我在调用pyinstaller时也使用了完整路径,因为我有多个python版本。