控制环境¶
许多环境变量可用于控制Kivy的初始化和行为。
例如,为了将文本渲染限制为PIL实现::
$ KIVY_TEXT=pil python main.py
环境变量应在导入 kivy 之前设置:
import os
os.environ['KIVY_TEXT'] = 'pil'
import kivy
路径控制¶
在 1.0.7 版本加入.
您可以控制配置文件、模块和Kivy数据所在的默认目录。
- KIVY_DATA_DIR
Kivy 数据的位置,默认为 <kivy 路径>/data。
- KIVY_MODULES_DIR
Kivy 模块的位置,默认为 <kivy path>/modules。
- KIVY_HOME
Kivy 主目录的位置。此目录用于本地配置,必须位于可写的位置。
- 默认为:
桌面:<用户主目录>/.kivy
Android:<安卓应用路径>/.kivy
iOS:<用户主目录>/Documents/.kivy
在 1.9.0 版本加入.
- KIVY_DESKTOP_PATH_ID
为桌面平台目录设置面向用户、可读的应用程序标题。这使得最终用户在浏览文件系统时,能够轻松识别哪个应用程序拥有哪些目录。
重要提示: 设置此变量将为包含配置和日志文件的
.kivy目录创建一个**应用特定**的位置。如果不设置KIVY_DESKTOP_PATH_ID,配置和日志将存放在所有 Kivy 应用共享的全局.kivy目录中。这允许多个 Kivy 应用拥有独立的配置和日志目录。设置后,该标识符会为文件系统安全性进行规范化处理(如 /\:*?"<>| 等无效字符会被替换为下划线),并用于构建 KIVY_HOME、user_data_dir 和 user_cache_dir 路径。
使用此功能显示一个清晰、易识别的名称,如“我的照片编辑器”或“公司应用名称”,而不是技术标识符。
如果在桌面平台上未设置,路径构造将回退到使用 App.name(从您的 App 类名称派生的字符串)。系统会记录一条警告,建议您设置 KIVY_DESKTOP_PATH_ID 以提高最终用户的清晰度。
优先于KIVY_HOME环境变量和虚拟环境检测。在移动平台(iOS、Android)上忽略,因为这些平台的文件系统不允许用户浏览。
移动开发者注意:如果您在桌面平台上开发移动应用,可以将`KIVY_DESKTOP_PATH_ID`设置为任意值以抑制警告。该变量对您的移动应用不会产生任何影响,但设置它可以避免在开发过程中出现警告。
- 当设置为“My Photo Editor”时的示例路径:
Windows:
%APPDATA%\\My_Photo_Editor\\.kivymacOS:
~/Library/Application Support/My_Photo_Editor/.kivyLinux:
~/.local/share/My_Photo_Editor/.kivy
在 3.0.0 版本加入.
- KIVY_SDL3_PATH
如果设置了此路径,则在编译kivy时将使用该路径下的SDL3库和头文件,而非系统范围内安装的版本。要在运行kivy应用时使用相同的库,必须将此路径添加到PATH环境变量的开头。
在 3.0.0 版本加入.
警告
此路径对于Kivy的编译是必需的,但对于程序执行则不是必需的。
- KIVY_SDL3_FRAMEWORKS_SEARCH_PATH
如果设置了此路径,编译kivy时将使用该路径下的SDL3框架,而非系统范围内安装的框架。
该路径仅在macOS上使用,且必须包含SDL3.framework、SDL_image.framework、SDL_mixer.framework和SDL_ttf.framework。
在 3.0.0 版本加入.
警告
此路径对于Kivy的编译是必需的,但对于程序执行则不是必需的。
- KIVY_DEPS_ROOT
如果设置,在构建过程中,Kivy 将使用此目录作为根目录来搜索(目前仅限 SDL)依赖项。请注意,如果设置了 KIVY_SDL3_PATH 或 KIVY_SDL3_FRAMEWORKS_SEARCH_PATH,则将优先使用它们。
在 2.2.0 版本加入.
警告
此路径对于Kivy的编译是必需的,但对于程序执行则不是必需的。
配置¶
- KIVY_USE_DEFAULTCONFIG
如果环境中存在此名称,Kivy 将不会读取用户配置文件。
- KIVY_NO_CONFIG
如果设置了此项,将不会读取或写入任何配置文件。这也适用于用户配置目录。
- KIVY_NO_FILELOG
如果设置了此项,日志将不会打印到文件中。
- KIVY_NO_CONSOLELOG
如果设置了此项,日志将不会打印到控制台。
- KIVY_NO_ARGS
如果设置为('true'、'1'、'yes')中的任意一个,命令行中传入的参数将不会被Kivy解析和使用。也就是说,你可以安全地编写脚本或应用,使用自己的参数,而无需使用`--`分隔符。
import os os.environ["KIVY_NO_ARGS"] = "1" import kivy
在 1.9.0 版本加入.
- KCFG_section_key
如果检测到这样的格式环境名称,它将被映射到Config对象。它们仅在导入`kivy`时加载一次。可以通过`KIVY_NO_ENV_CONFIG`禁用此行为。
import os os.environ["KCFG_KIVY_LOG_LEVEL"] = "warning" import kivy # during import it will map it to: # Config.set("kivy", "log_level", "warning")
在 1.11.0 版本加入.
- KIVY_NO_ENV_CONFIG
如果设置了该选项,则不会有环境键映射到配置对象。如果未设置,任何 KCFG_section_key=value 格式的环境变量都将映射到 Config。
在 1.11.0 版本加入.
将核心限制为特定实现¶
kivy.core 会尝试为您的平台选择最佳可用实现。为了测试或自定义安装,您可能希望将选择器限制为特定的实现。
你可以通过逗号分隔的列表指定多个提供者,以设置优先级顺序。Kivy 将按列表顺序尝试每个提供者,并使用第一个成功初始化的提供者。例如::
$ KIVY_IMAGE=sdl3,pil python main.py
或者在Python中:
import os
os.environ['KIVY_IMAGE'] = 'sdl3,pil'
import kivy
这将首先尝试使用sdl3图像提供器,若sdl3不可用或文件格式不受其支持,则回退至pil。
一些核心模块也支持按实例选择提供者,允许在同一应用程序中不同的对象使用不同的提供者实现。详情请参阅以下模块:
kivy.core.audio_output- 按实例选择音频提供器kivy.core.image- 实例级图像提供器选择kivy.core.text- 按实例选择文本提供器
- KIVY_WINDOW
用于创建窗口的实现。
值:sdl3、x11、egl_rpi
- KIVY_TEXT
用于渲染文本的实现方式。
值:sdl3、pil、sdlttf
- KIVY_VIDEO
用于渲染视频的实现。
值:gstplayer、ffpyplayer、ffmpeg、android、null
- KIVY_AUDIO_OUTPUT
用于播放音频的实现。
值:sdl3、gstplayer、ffpyplayer、avplayer
- KIVY_IMAGE
用于读取图像的实现。
值:sdl3、pil、imageio、tex、dds
在 2.0.0 版本发生变更.
移除了 GPL 的 gif 实现。
- KIVY_CAMERA
用于读取摄像头的实现。
值:avfoundation、android、opencv
- KIVY_SPELLING
用于拼写检查的实现。
值:enchant、osxappkit
- KIVY_CLIPBOARD
用于剪贴板管理的实现。
值:sdl3、dummy、android
度量(Metrics)¶
- KIVY_DPI
如果设置了该值,它将用于
Metrics.dpi。在 1.4.0 版本加入.
- KIVY_METRICS_DENSITY
如果设置了该值,它将用于
Metrics.density。在 1.5.0 版本加入.
KIVY_METRICS_FONTSCALE
如果设置了该值,它将用于
Metrics.fontscale。在 1.5.0 版本加入.
图形。¶
- KIVY_GL_BACKEND
要使用的OpenGL后端。参见
cgl。- KIVY_GL_DEBUG
是否记录OpenGL调用。参见
cgl。- KIVY_GRAPHICS
是否使用OpenGL ES2。参见:mod:~kivy.graphics.cgl。
- KIVY_GLES_LIMITS
是否强制执行GLES2限制(默认启用,或设置为1)。如果设置为false,Kivy将不会真正兼容GLES2。
以下是设置为 true 时可能导致的不兼容性列表。
网格索引 |
如果为真,网格中的索引数量将限制为65535。 |
纹理位块传输 |
在将数据(颜色和缓冲区)格式写入纹理时,必须与创建纹理时使用的格式保持一致。在桌面平台上,驱动程序能正确处理不同颜色格式的转换,而在Android平台上,大多数设备无法完成此转换。参考:https://github.com/kivy/kivy/issues/1600 |
在 1.8.1 版本加入.
- KIVY_BCM_DISPMANX_ID
更改使用egl_rpi窗口提供程序时默认的Raspberry Pi显示器。可用值列表可在`vc_dispmanx_types.h`中查看。默认值为0:
0: DISPMANX_ID_MAIN_LCD
1: DISPMANX_ID_AUX_LCD
2: DISPMANX_ID_HDMI
3: DISPMANX_ID_SDTV
4: DISPMANX_ID_FORCE_LCD
5: DISPMANX_ID_FORCE_TV
6: DISPMANX_ID_FORCE_OTHER
- KIVY_BCM_DISPMANX_LAYER
在使用egl_rpi窗口提供程序时,更改默认的Raspberry Pi dispmanx层。默认值为0。
在 1.10.1 版本加入.
事件循环¶
- KIVY_EVENTLOOP
当应用以异步方式运行时,应使用哪个异步库。参见
kivy.app中的示例用法。'asyncio':当应用以异步方式运行时,以及标准应使用asyncio库包。若未设置,则为默认值。
'trio':当应用以异步方式运行时,且使用 trio应使用该包。
在 2.0.0 版本加入.