Kivy中的目录转到主目录,而不是Mac中的main.py目录,但在Windows中

时间:2019-02-19 02:54:00

标签: kivy

我有一个不寻常的情况。我有一个功能完善的kivy应用程序。本质上,它使用FileChooserIconView并采用根

    `FileChooserIconView:
        filters: [root.selected]
        size_hint: (1, 0.4)`

因此具有此功能

`def selected(self, directory, filename):
    # This function extracts the selected folder using 
    #the information from FileChooser
    # This function takes as input:
    # -filename: The filename of each file in each directory
    # This function gives the output:
    # -the full path to the directory with the selected folder
    self.ids.mypath.text = os.path.join(os.path.dirname(filename), '') `

我可以提取感兴趣的目录(而不是目录中的每个文件)。

应用程序使用FileChooser提取感兴趣的目录,并使用它以递归的方式提取那里的所有文件并进行处理。

它在Windows的Spyder中完美运行。我将其打包在Windows中,它可以作为独立的exe完美运行(查找上载所需的所有文件,并且可以完美运行)。

它在Mac的Spyder中完美运行。但是,我将其打包在Mac中,并且完全找不到本地文件。这是我的问题。一旦打包在mac中,它便不在mac主目录中寻找它们,而不是在dist文件夹中寻找本地文件。它需要读取一个实际在dist文件夹中的文件,但该应用程序不在该文件夹中查找该文件。它在mac home目录中寻找它。

我尝试使用多种方法将main.py所在的当前目录(在dist文件夹中)放在其中,

filename = inspect.getframeinfo(inspect.currentframe()).filename
path = os.path.dirname(os.path.abspath(filename))

来自问题

如何正确确定当前脚本目录?

但它仍然查找mac home目录,而不是main.py所在的目录。

我尝试使用上面的路径更改目录,但是仍然转到mac home目录。

当我在main.py文件中使用print(os.getcwd())时,它在Spyder中使用时会打印正确的目录,但打包后会转到mac home目录。我真的很困惑,找不到类似的问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

非常感谢您的所有评论,尤其是约翰·安德森(John Anderson),他使我处于正确的轨道。他们使我的搜索更加轻松。

最后,我解决了。

打包应用程序时,应引用main.py的位置。我使用的是__file__,当未打包应用程序时,此方法有效,这就是为什么它在Spyder中有效的原因。但是,打包应用程序后,找到main.py文件夹的正确方法是sys._MEIPASS

就是这样,就像使用sys._MEIPASS

一样简单

有关更多详细信息,John Anderson提供的链接https://pyinstaller.readthedocs.io/en/stable/runtime-information.html#using-file-and-sys-meipass很棒。