解决使用 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, 下班!

相关推荐
加班是不可能的,除非双倍日工资3 分钟前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi37 分钟前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip1 小时前
vite和webpack打包结构控制
前端·javascript
excel1 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国2 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼2 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy2 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
ZXT2 小时前
promise & async await总结
前端
Jerry说前后端2 小时前
RecyclerView 性能优化:从原理到实践的深度优化方案
android·前端·性能优化
画个太阳作晴天2 小时前
A12预装app
linux·服务器·前端