使用 buildozer 构建后,kivy 应用程序中的文件路径无效
Path to files in kivy app not valid after building with buildozer
我正在尝试使用 buildozer 虚拟机构建一个 kivy 应用程序。只要我的 main.py 不包含任何特定的文件路径,它就可以正常工作。
例如,在我的应用程序中,我想显示一张图片。如果我在 Windows 上 运行,我会将来源指定为
C:\pathtoapp\img\image.png
在Ubuntu中会是
/home/pathtoapp/img/image.png
如果我尝试使用 buildozer 构建应用程序,我会收到错误消息:
I/Python (15649): [Error ] [Image ] Error reading file
然后是上面的路径。
这是一个适用于 Ubuntu 的示例,但在部署到我的 Android phone:
时会给出上述错误消息
from kivy.lang import Builder
from kivy.app import App
from kivy.uix.image import Image
kv = '''
BoxLayout:
Image:
source: app.image
'''
class Test(App):
def build(self):
self.image = '/home/kivy/Desktop/test/img/g3347.png'
print(self.image)
return Builder.load_string(kv)
if __name__ == '__main__':
Test().run()
现在我很困惑,因为我不知道如何在我的代码中正确指定路径。
当然是报错了。您在 Android 上没有这样的路径,在 Windows 上也没有。在 Kivy 中,你可以使用 relative paths,如果你使用像这样的东西应该可以工作:
self.image = 'g3347.png'
如果该文件在您的 main.py
/main.pyo
目录中。过去它有时在 Android 上对我不起作用,所以我有一个 "safety catch" 这样我就不会再遇到这个问题(它现在应该可以工作,但安全总比后悔好):
os.path.dirname(os.path.abspath(__file__))
这将 return 指向 main.py
文件夹的路径,您可以像这样使用它:
path = os.path.dirname(os.path.abspath(__file__))
self.image = path + '/g3347.png'
我也习惯把路径放在App
class里,方便随时访问
更多花哨的路径请查看 App.user_data_dir,它也为您解决了这个问题,但如果您卸载后留下一些混乱,这不是一个好方法,例如如果您在 Windows 上并且决定删除您的应用程序,但不知何故忘记从 %appdata%
或 %localappdata%
.
中删除您的文件夹
我正在尝试使用 buildozer 虚拟机构建一个 kivy 应用程序。只要我的 main.py 不包含任何特定的文件路径,它就可以正常工作。 例如,在我的应用程序中,我想显示一张图片。如果我在 Windows 上 运行,我会将来源指定为
C:\pathtoapp\img\image.png
在Ubuntu中会是
/home/pathtoapp/img/image.png
如果我尝试使用 buildozer 构建应用程序,我会收到错误消息:
I/Python (15649): [Error ] [Image ] Error reading file
然后是上面的路径。 这是一个适用于 Ubuntu 的示例,但在部署到我的 Android phone:
时会给出上述错误消息from kivy.lang import Builder
from kivy.app import App
from kivy.uix.image import Image
kv = '''
BoxLayout:
Image:
source: app.image
'''
class Test(App):
def build(self):
self.image = '/home/kivy/Desktop/test/img/g3347.png'
print(self.image)
return Builder.load_string(kv)
if __name__ == '__main__':
Test().run()
现在我很困惑,因为我不知道如何在我的代码中正确指定路径。
当然是报错了。您在 Android 上没有这样的路径,在 Windows 上也没有。在 Kivy 中,你可以使用 relative paths,如果你使用像这样的东西应该可以工作:
self.image = 'g3347.png'
如果该文件在您的 main.py
/main.pyo
目录中。过去它有时在 Android 上对我不起作用,所以我有一个 "safety catch" 这样我就不会再遇到这个问题(它现在应该可以工作,但安全总比后悔好):
os.path.dirname(os.path.abspath(__file__))
这将 return 指向 main.py
文件夹的路径,您可以像这样使用它:
path = os.path.dirname(os.path.abspath(__file__))
self.image = path + '/g3347.png'
我也习惯把路径放在App
class里,方便随时访问
更多花哨的路径请查看 App.user_data_dir,它也为您解决了这个问题,但如果您卸载后留下一些混乱,这不是一个好方法,例如如果您在 Windows 上并且决定删除您的应用程序,但不知何故忘记从 %appdata%
或 %localappdata%
.