解决使用 Pyinstaller 打包成可执行文件之后报找不到文件的问题(路径问题)

今天在把一些功能性脚本打包成可执行文件时候遇到了一个找不到文件的问题

举个栗子

创建一个名为 Test 的文件, 代码很简单, 获取当前工作目录

js 复制代码
work_path = os.getcwd()  
print(f'\n\n当前工作路径: {work_path}\n\n')

创建一个 Test 文件夹, 放进去, 跑一下

不负众望, 艰难的跑起来了:

用 pyinstaller 打包一下, 最终在 dist 文件目录下生成一个可执行文件:

双坤一下:

工作目录变成了根目录,这是为什么呢?

由于我不是专业的, 只是个业余写一写简单的用用, 网上查了一下, 似懂非懂的了解了一些,在运行可执行文件时候系统会生成一个临时文件夹, 除代码之外的数据资源需要通过访问临时文件夹获取, 也就是说这个时候的工作目录需要切换到可执行文件所在的目录, 所以解决方案就是切换目录, 写一个方法来获取工作目录(以下代码来自网上):

lua 复制代码
def current_work_path():  
   if hasattr(sys, 'frozen'):  
      return os.path.dirname(sys.executable)           
   return os.path.dirname(__file__)

so, 最终结合 demo 测试一下

lua 复制代码
def current_work_path():  
    if hasattr(sys, 'frozen'):  
        return os.path.dirname(sys.executable)  
    return os.path.dirname(__file__)  
  
work_path = current_work_path()  
os.chdir(work_path)  
print(f'\n\n当前工作路径: {os.getcwd()}\n\n')

这样在执行可执行文件时候就可以访问可执行文件所在目录下的资源了

OK, 下班!

相关推荐
hunterandroid3 小时前
[鸿蒙从零到一] ArkUI 动画与转场实战:状态驱动、组件过渡与页面衔接
前端
何时梦醒3 小时前
React + TypeScript + Vite 实战:从零构建 Color Picker 应用
前端·javascript·架构
谁在黄金彼岸3 小时前
Nuxt.js 详解(一):Vue 开发者为什么要关注 Nuxt
前端
英勇无比的消炎药3 小时前
TinyRobot v0.5.0 深度解读(三):Layout 组件——如何组织复杂工作区的页面布局
前端·vue.js
默_笙3 小时前
😋 我让 DeepSeek-R1 在浏览器本地跑了起来,后端同事说"你认真的?"
前端·javascript
英勇无比的消炎药3 小时前
TinyRobot v0.5.0 深度解读(四):CLI 脚手架——从零搭建 AI 应用的工程化实践
前端·vue.js·github
程序员黑豆4 小时前
鸿蒙应用开发之双向绑定实战:从 V1 到 V2 的完整迁移指南
前端·harmonyos
Escape4 小时前
为什么你的 AI 越聊越傻?从 Token 到 Agent,彻底搞懂 AI Agent的秘密㊙️
前端·人工智能·后端
李明卫杭州4 小时前
Vue3 响应式概念 ↔ React 对应方案(类组件与函数组件)对照笔记
前端·vue.js·react.js