Python 使用buildozer构建后,kivy应用程序中文件的路径无效

Python 使用buildozer构建后,kivy应用程序中文件的路径无效,python,kivy,buildozer,Python,Kivy,Buildozer,我正在尝试使用buildozer虚拟机构建一个kivy应用程序。只要my main.py不包含任何特定的文件路径,它就可以正常工作。 例如,在我的应用程序中,我想显示一幅图像。如果我在Windows上运行,我会将源指定为 C:\pathtoapp\img\image.png 在Ubuntu中是这样的 /home/pathtoapp/img/image.png 如果我尝试使用buildozer构建应用程序,我会收到错误消息: I/Python (15649): [Error ] [Imag

我正在尝试使用buildozer虚拟机构建一个kivy应用程序。只要my 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手机时会显示上述错误消息:

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,您可以使用,如果您使用以下东西,应该可以使用:

self.image = 'g3347.png'
如果该文件位于
main.py
/
main.pyo
目录下。在过去,它有时在Android上对我不起作用,所以我有一个“安全陷阱”,这样我就不会再遇到这个问题了(它现在应该可以工作了,但安全总比抱歉好):

它将返回到
main.py
文件夹的路径,您可以这样使用它:

path = os.path.dirname(os.path.abspath(__file__))
self.image = path + '/g3347.png'
我还习惯于将路径放在
App
类中,这样我就可以随时访问它


有关更奇特的路径,请看,这也为您解决了这个问题,但如果您在卸载后留下一些混乱,例如,如果您在Windows上,决定删除应用程序,但不知何故忘记从
%appdata%
%localappdata%
中删除文件夹,则这不是一个好方法,这是我自己应该弄明白的。谢谢。它适用于相对路径,但我会记住安全锁销,以防将来遇到问题。
path = os.path.dirname(os.path.abspath(__file__))
self.image = path + '/g3347.png'