欢迎各位兄弟 发布技术文章
这里的技术是共享的
当你在Python脚本中使用 os.path.dirname(os.path.abspath(__file__))
来获取当前文件的目录时,它会在脚本作为源代码运行时正确地给出脚本所在的目录。但是,当你将这个脚本打包成一个可执行文件(如通过PyInstaller等工具),情况会有所不同。
当Python脚本被编译打包成.exe可执行文件后,__file__
的值可能不再是预期的脚本文件路径,这取决于打包工具如何处理资源和执行环境。特别是,一些打包工具可能会改变脚本的运行上下文,导致 __file__
可能指向一个临时解压目录,而不是实际的可执行文件所在目录。
解决这个问题的方法之一是利用打包工具提供的特定方法来获取正确的执行文件路径,但这种方法依赖于你使用的具体打包工具。例如,如果你使用的是PyInstaller,你可以使用以下代码来获取可执行文件的路径:
Python1import sys 2import os 3 4if getattr(sys, 'frozen', False): 5 # 如果是通过PyInstaller冻结的(打包成exe) 6 current_dir = os.path.dirname(sys.executable) 7else: 8 # 如果是正常的python脚本运行 9 current_dir = os.path.dirname(os.path.abspath(__file__))
这段代码首先检查 sys.frozen
属性,这是PyInstaller在打包过程中设置的一个标志。如果脚本是被打包的,它会使用 sys.executable
获取可执行文件的路径,并以此确定当前目录。否则,它会像之前那样使用 __file__
来获取目录。这样可以确保无论是作为脚本运行还是作为可执行文件运行,都能正确获取到期望的当前路径。