Через несколько часов я наконец понял. Сначала я открываю свой kv-файл как file
, а затем передаю его Builder
, чтобы иметь возможность установить кодировку. В этом случае мне просто нужно было вручную определить путь к файлу kv
как sys._MEIPASS + 'main2.kv'
, и тогда он сработал.
UPD: Чтобы сделать эту работу, сначала сделайте несколько операций импорта:
import os, sys
from kivy.resources import resource_add_path
а затем в конце вашего приложения непосредственно перед MainApp.run () добавьте это:
if __name__ == "__main__":
# these lines should be added
if hasattr(sys, '_MEIPASS'):
resource_add_path(os.path.join(sys._MEIPASS))
###
MainApp().run()
Когда мы создаем один файл .exe, он содержит все файлы внутри него, поэтому он распаковывает его в какой-то случайный временная папка во время работы. sys._MEIPASS
вот путь к временной папке.
Так что это должно работать. Если он по-прежнему не может найти файлы, вы можете попробовать изменить путь к файлу следующим образом: например, вместо 'example.kv'
напишите sys._MEIPASS + '/' + 'example.kv'
.
Также убедитесь, что вы все сделали правильно в. spe c, поэтому вы должны добавить свои файлы в список datas
в Analysis
, например:
a = Analysis(['main.py'],
...
datas=[('main.kv', '.'), ('bg.png', '.'), ('CenturyGothic.ttf', '.'), ('finish.mp3', '.'), ('Logo.png', '.'),],
Итак, если у вас есть только kv
файл, который нужно добавить, это будет:
datas=[('main.kv', '.')],