我有一个不寻常的情况。我有一个功能完善的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目录。我真的很困惑,找不到类似的问题。
非常感谢任何帮助。
答案 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
很棒。