我知道关于这个主题有很多答案,但一旦你在可执行文件中编译了一个脚本,就没有人能工作了。
在我的python脚本中,我在脚本的同一目录中创建了一个文件。为了获得当前目录的路径,我使用pathlib
basepath = Path(__file__).parent
filename='myfile'
filepath=os.path.join(basepath, filename)
如果我打印目录,我会把文件写在好的目录中,python中的一切都很好(即桌面/myname/myscriptdir/myfile(
但有一次我";编译";使用带有--onefile的pyinstaller,如果我启动可执行文件,目录将是喜欢/var/folders/nr/w0698dl96j39_fq33lqd8pk80000gn/T/MEIP12KxC/myfile
相信我,我尝试了很多不同的方法(abspath,os.reapath..(来获取当前的目录,但在可执行文件中没有一个能很好地工作。
使用带有--onefile
或-F
标志的pyinstaller
编译应用程序时,它创建的文件实际上是一个存档文件,类似于.zip
文件。
当您执行该文件时,它会启动一个进程,将自己提取到操作系统文件系统中某个临时文件夹中。这是在编译的应用程序中使用__file__
变量时报告的路径
然后,它继续从那里启动您的应用程序,临时目录将成为应用程序生命周期内的运行时程序。当应用程序最终关闭时,它会在退出时删除临时运行时目录。
既然是这样,还有其他选择。
要在运行时获取当前工作目录,请使用:
path = '.'
#or
path = os.getcwd()
要在运行时获取已编译的可执行文件的路径:
path = sys.executable