当前位置:首页>python>再谈Python文件路径

再谈Python文件路径

  • 2026-08-26 05:55:15
再谈Python文件路径
在Python运行时,经常会把自己开发的文件和调用的文件放到同一个文件夹里,方便统一管理和调用,比如.ini初始化文件, 第三方的.dll动态链接库文件等。你们有没有出现过这种问题,如果直接运行你的脚本.py,是正常可以调用读取的,但是把你的脚本打包成.exe文件可执行文件后,虽然.exe还是在那个文件,但就报错找不到了呢?
通过设置报错时显示完整的读取路径,发现,读取文件的路径完全不是你当前.exe文件的存放路径,而是一个临时文件夹。
为什么?
我使用以下函数读取当前文件夹路径
def get_path():    return os.path.dirname(os.path.realpath(__file__))
问题解析:

__file__ 在打包后指向临时解压目录:PyInstaller 会将 Python 脚本和依赖打包成单个可执行文件,运行时会在临时目录解压,__file__ 指向的是解压后的临时文件路径!

解决方案:

把获取路径的两种情况都考虑进去:

  1. 如果文件已经打包成.exe可执行文件了,那就通过sys.executable获取

  2. 如果文件未打包,还是原来的.py脚本,那就还是使用os.path.abspath(__file__)获取。

def get_executable_path():    """获取可执行文件所在目录(对于资源文件存储有用)"""    if getattr(sys, 'frozen', False):        return os.path.dirname(sys.executable)    else:        return os.path.dirname(os.path.abspath(__file__))

虽然使用绝对路径也能解决这个问题,但是一般不会这样做,因为如果使用绝对路径,必须把整个文件夹固定在那个目录才行,使用的时候不能随意的复制到其他位置使用了。

也有一种情况可以使用绝对路径,那就是被调用文件固定放到服务器的哪个共享位置,不需要本地化部署。

相关文件:
Python基础要点:理清路径引用
Python 读取及写入.ini文件

最新文章

随机文章