我的情况不寻常。我有一个功能完全实用的Kivy应用程序。本质上,它使用FileChoosericonView并采用root
`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中打包,就没有在Dist文件夹中寻找本地文件,而是在Mac Home目录中寻找它们。它需要读取实际上在DIST文件夹中的文件,但是该应用程序不在此处寻找。它在Mac主目录中寻找它。
我试图使用几种方法将当前目录放置在amain.py所在的位置(在DIST文件夹中)
filename = inspect.getframeinfo(inspect.currentframe()).filename
path = os.path.dirname(os.path.abspath(filename))
来自问题
如何正确确定当前脚本目录?
,但仍然可以看到Mac主目录,而不是Main.py所在的目录。
我试图使用上面的路径更改目录,但仍然转到MAC主目录。
当我在main.py文件中使用print(os.getcwd())时,在Spyder中使用时会打印正确的目录,但包装后它转到Mac Home目录。我真的被卡住了,找不到类似的问题。
任何帮助。
非常感谢您的所有评论,尤其是约翰·安德森(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
很棒。