【发布时间】:2021-09-18 13:11:03
【问题描述】:
我尝试了网络上的大多数解决方案,但都没有奏效。
我已经测试过pyinstaller、py2exe、cxfreeze
在 Windows 上编译时,这些都不起作用。
但是,当我在 linux 上使用 pyinstaller 编译它时。
exe 的大小约为 500mb 和 int 包括所以可能的 linux os 文件。
它在 Windows 和 linux 下的 wine 上运行良好。
为了减小大小,我尝试了 virtualenv,但没有成功。
然后
我尝试在windows系统上编译,但目前没有成功。
我正在共享需要转换为 exe 的基本加载程序 main.py。以及一个名为 BasicClasses 的必需编译文件 (.pyd)。....*.pyd
当运行 main.py 时,它应该显示一个按钮的 kivy 应用程序。
需要的包被导入到main.py中
任何人都可以分享windows系统下main.py的exe文件可以加载BasicClasses.pyd
和步骤。如果我的代码有错误请指出。
main.py
#!/bin/python3
##import kivy
import cython
import os
if os.name == 'nt':
from kivy_deps import sdl2, glew
import pyautogui
###import mouse
#import cv2
#import os, sys
#from pathlib import Path
#from kivy.resources import resource_add_path, resource_find
#from kivy.base import runTouchApp
from openpyxl import load_workbook
#from os.path import abspath
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.switch import Switch
from kivy.uix.label import Label
#from kivy.uix.widget import Widget
##from kivy.uix.canvas import Canvas
from kivy.graphics import Rectangle, Color, Line
#from kivy.graphics import *
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.pagelayout import PageLayout
from kivy.uix.stacklayout import StackLayout
#from kivy.uix.gridlayout import GridLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.filechooser import FileChooserListView
from kivy.properties import ObjectProperty, StringProperty, ColorProperty,NumericProperty
from kivy.uix.textinput import TextInput
#from kivy.core.window import Window
#from kivy.clock import Clock
from kivy.metrics import dp
from kivy.effects.dampedscroll import DampedScrollEffect
##from kivy.effects.scrolleffect import ScrollEffect
#from functools import partial
#from kivy.animation import Animation
import webbrowser
from kivy.config import Config
from BasicClasses import *
root = MainWindow()
if __name__=="__main__":
root.run()
BasicClasses.py
import os
import sys
import cython
import kivy
#import BasicClasses
import pyautogui
import openpyxl
from openpyxl import load_workbook
###import mouse
#import cv2
#import os, sys
#from pathlib import Path
#from kivy.resources import resource_add_path, resource_find
#from kivy.base import runTouchApp
from openpyxl import load_workbook
#from os.path import abspath
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.switch import Switch
from kivy.uix.label import Label
#from kivy.uix.widget import Widget
##from kivy.uix.canvas import Canvas
from kivy.graphics import Rectangle, Color, Line
#from kivy.graphics import *
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.pagelayout import PageLayout
from kivy.uix.stacklayout import StackLayout
#from kivy.uix.gridlayout import GridLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.filechooser import FileChooserListView
from kivy.properties import ObjectProperty, StringProperty, ColorProperty,NumericProperty
from kivy.uix.textinput import TextInput
#from kivy.core.window import Window
#from kivy.clock import Clock
from kivy.metrics import dp
from kivy.effects.dampedscroll import DampedScrollEffect
##from kivy.effects.scrolleffect import ScrollEffect
#from functools import partial
#from kivy.animation import Animation
#import webbrowser
from kivy.config import Config
ICON='./icon.ico'
Config.set('kivy','window_icon',ICON)
if os.name == 'nt':
from kivy_deps import sdl2, glew
class Main(Button):
def __init__(self,**kwargs):
super().__init__(**kwargs)
self.text='HI'
class MainWindow(App):
def __init__(self,**kwargs):
super().__init__(**kwargs)
global ICON
self.icon=ICON
print('MainWindow in Classes')
def build(self):
return Main()
if __name__=='__main__':
MainWindow().run()
BasicClasses.py 可以使用 cython 包编译成二进制 用 setup.py 和 compile.bat 文件作为
setup.py
from distutils.core import Extension, setup
from Cython.Build import cythonize
import os
import sys
import cython
#import BasicClasses
import pyautogui
import openpyxl
from openpyxl import load_workbook
###import mouse
#import cv2
#import os, sys
#from pathlib import Path
#from kivy.resources import resource_add_path, resource_find
#from kivy.base import runTouchApp
from openpyxl import load_workbook
#from os.path import abspath
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.switch import Switch
from kivy.uix.label import Label
#from kivy.uix.widget import Widget
##from kivy.uix.canvas import Canvas
from kivy.graphics import Rectangle, Color, Line
#from kivy.graphics import *
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.pagelayout import PageLayout
from kivy.uix.stacklayout import StackLayout
#from kivy.uix.gridlayout import GridLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.filechooser import FileChooserListView
from kivy.properties import ObjectProperty, StringProperty, ColorProperty,NumericProperty
from kivy.uix.textinput import TextInput
#from kivy.core.window import Window
#from kivy.clock import Clock
from kivy.metrics import dp
from kivy.effects.dampedscroll import DampedScrollEffect
##from kivy.effects.scrolleffect import ScrollEffect
#from functools import partial
#from kivy.animation import Animation
#import webbrowser
if os.name == 'nt':
from kivy_deps import sdl2, glew
# define an extension that will be cythonized and compiled
ext = Extension(name="BasicClasses", sources=["BasicClasses.py"])
setup(ext_modules=cythonize(ext))
##run as
##python setup.py build_ext --inplace
##python3 setup.py build_ext --inplace
编译.bat
python setup.py build_ext --inplace
python3 setup.py build_ext --inplace
【问题讨论】:
-
“但是,当我在 linux 上使用 pyinstaller 编译它时。exe 的大小约为 500mb 并且 int 包括 linux os 文件”——这可能正是您使用的所有依赖项加起来的结果。
-
信息不足。你的
pyinstaller是什么版本?什么是构建日志?
标签: python kivy pyinstaller cython py2exe