如何解决Nuitka和Kivy C扩展模块_event.so
我正在尝试使用Nuitka从这个基本的Kivy示例hello.py创建一个独立的可执行文件:
from kivy.app import App
from kivy.uix.button import Button
class TestApp(App):
def build(self):
return Button(text='Hello World')
TestApp().run()
当我执行python -m nuitka --follow-imports hello.py
时,Nuitka会创建可执行文件,但是当我运行该可执行文件时,它将失败并显示
../ dist-packages / kivy / event.py”,第8行,在导入kivy中。_event没有名为_event的模块
模块 _event 实际上是Python解释器找到并加载OK的c扩展模块 _event.so 。
看来Nuitka通常可以处理c个扩展模块,例如在{p}上做python -m nuitka --follow-imports
from bluetooth import bluez as _btz
print _btz._bt
print "Hello World!"
即使模块 bluez 具有指向 _bluetooth.so 扩展模块的import _bluetooth
语句,
./ hello.bin
Hello World!
在相关情况下:系统为MX Linux 18.3(基于Debian Stretch),Python 2.7.13,Kivy v1.10.1,Nuitka 0.6.8.4
我的目标是加快Kivy应用程序的启动时间,而不是打包应用程序以进行分发。例如,我有一个RPI2B嵌入式系统,在buildroot生成的Linux上运行Kivy应用程序。此冷启动仅需12秒,其中6秒是Kivy应用启动时间。因此,例如PyInstaller在这里没有帮助我,而Nuitka可能会帮我。
更新
我放弃了尝试使其与Python 2.7一起使用的方法,但不确定会发生什么,但遇到了一些Nuitka无限优化循环问题。使用Python 3.5进行了进一步的介绍,这些是我刚开始使用时的注释:
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-setuptools
sudo apt-get install python3-dev
sudo apt-get install mesa-common-dev
sudo apt install libgl1-mesa-dev
sudo apt-get install chrpath
pip3 install wheel
pip3 install pygame
pip3 install kivy (ended up with 1.11.1)
pip3 install nuitka
创建dependencies.py:
# external modules
import kivy.cache
import kivy.atlas
import kivy.network
import kivy.network.urlrequest
#import kivy.lib.osc
#import kivy.lib.osc.OSC
#import kivy.lib.osc.oscAPI
import kivy.lib.mtdev
#import kivy.lib.sdl2
import kivy.factory_registers
import kivy.input.recorder
import kivy.input.providers
import kivy.input.providers.tuio
import kivy.input.providers.mouse
#import kivy.input.providers.wm_common
#import kivy.input.providers.wm_touch
#import kivy.input.providers.wm_pen
import kivy.input.providers.hidinput
import kivy.input.providers.linuxwacom
#import kivy.input.providers.mactouch
import kivy.input.providers.mtdev
# compiled modules
import kivy.event
import kivy.graphics.buffer
#import kivy.graphics.c_opengl_debug
import kivy.graphics.compiler
import kivy.graphics.context_instructions
import kivy.graphics.fbo
import kivy.graphics.instructions
import kivy.graphics.opengl
import kivy.graphics.opengl_utils
import kivy.graphics.shader
#import kivy.graphics.stenctil_instructions
import kivy.graphics.texture
import kivy.graphics.transformation
import kivy.graphics.vbo
import kivy.graphics.vertex
import kivy.graphics.vertex_instructions
import kivy.graphics.tesselator
import kivy.graphics.svg
import kivy.properties
import kivy.graphics.cgl_backend
# core
# import kivy.core.audio.audio_gstplayer
# import kivy.core.audio.audio_pygst
import kivy.core.audio.audio_sdl2
# import kivy.core.audio.audio_pygame
# import kivy.core.camera.camera_avfoundation
# import kivy.core.camera.camera_pygst
# import kivy.core.camera.camera_opencv
# import kivy.core.camera.camera_videocapture
import kivy.core.clipboard.clipboard_sdl2
# import kivy.core.clipboard.clipboard_android
# import kivy.core.clipboard.clipboard_pygame
# import kivy.core.clipboard.clipboard_dummy
# import kivy.core.image.img_imageio
# import kivy.core.image.img_tex
# import kivy.core.image.img_dds
import kivy.core.image.img_sdl2
# import kivy.core.image.img_pygame
# import kivy.core.image.img_pil
# import kivy.core.image.img_gif
# import kivy.core.spelling.spelling_enchant
# import kivy.core.spelling.spelling_osxappkit
import kivy.core.text.text_sdl2
# import kivy.core.text.text_pygame
# import kivy.core.text.text_sdlttf
# import kivy.core.text.text_pil
# import kivy.core.video.video_gstplayer
# import kivy.core.video.video_pygst
# import kivy.core.video.video_ffmpeg
# import kivy.core.video.video_pyglet
# import kivy.core.video.video_null
import kivy.core.window.window_info
import kivy.graphics.cgl_backend.cgl_glew
import kivy.graphics.cgl_backend.cgl_gl
import kivy.graphics.cgl_backend.cgl_sdl2
import kivy.core.window.window_sdl2
#import kivy.core.window.window_egl_rpi
# import kivy.core.window.window_pygame
# import kivy.core.window.window_sdl
# import kivy.core.window.window_x11
像这样使用它:
python3 -m nuitka --include-plugin-files=dependencies.py --standalone hello.py
cp -r <path/to>/lib/python3.5/site-packages/kivy/data <path/to>/hello.dist/kivy/
./hello.dist/hello
通过在Dependencies.py中添加相应的导入语句,可以纠正任何“ ImportError:没有名为<...>的模块”的情况。
但是,生成的可执行文件似乎并不比原始python脚本快。而且它不会在同一台机器上的单独MX Linux实例下运行,我明白了:
X Error of Failed request: BadValue (integer parameter out of range for operation)
Major opcode of Failed request: 155 (GLX)
Minor opcode of Failed request: 3 (X_GLXCreateContext)
Value in Failed request: 0x0
Serial number of Failed request: 72
Current serial number in output stream: 73
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。