当前位置:   article > 正文

pyinstaller 关于打包路径的总结

pyinstaller 关于打包路径的总结

一、相对路径(自己总结得出,简单好用,力荐)

        py文件的相对路径:相对于py文件所在目录的相对路径。

        exe文件的相对路径:相对于exe文件所在目录的相对路径。

准备打包的代码:

  1. import time
  2. with open(file='bai.txt',mode='r',encoding='utf_8') as f:
  3. text=f.read()
  4. print(text)
  5. for i in range(3):
  6. print(f'程序{3-i}秒后自动退出!')
  7. time.sleep(3)

资源文件bai.txt中的内容:

项目文件目录结构:

        程序中下面代码是相对路径。

file='bai.txt'

        意思是bai.txt文件必须放在当前目录下。其实不管是运行py文件还是exe文件,运行谁就将该文件放在谁的当前目录下即可。

        1.打包多文件

         (1)使用pyinstaller -D PATH.py命令打包单文件。

        (2)将资料文件bai.txt拷贝至exe文件所在目录。

        (3) 双击exe文件运行结果如下图。

        2.打包单文件

         (1)使用pyinstaller -F PATH.py命令打包单文件。

        (2)将资料文件bai.txt拷贝至exe文件所在目录。

        (3) 双击exe文件运行结果如下图。

二、os.path.abspath(__file__)

使用os.path.abspath(__file__)拼接加载文件的路径。

代码如下:

  1. import time,os
  2. # 使用os.path.abspath(__file__)拼接路径
  3. path1_1=os.path.abspath(__file__)
  4. path1_2=os.path.dirname(path1_1)
  5. path1_3=os.path.join(path1_2,'bai.txt')
  6. print(f'os.path.abspath(__file__)获取的py文件路径:{path1_1}')
  7. print(f'os.path.abspath(__file__)获取的当前目录:{path1_2}')
  8. print(f'os.path.abspath(__file__)拼接后的txt文件路径:{path1_3}')
  9. with open(file=path1_3, mode='r', encoding='utf_8') as f:
  10. text=f.read()
  11. print(text)
  12. for i in range(3):
  13. print(f'程序{3-i}秒后自动退出!')
  14. time.sleep(3)

项目文件结构目录:同方法一中图片。

1.打包多文件

(1)使用pyinstaller打包成多文件

 (2)拷贝配置文件至exe所在目录中_internal文件夹中

打包成exe文件后,必须将配置文件bai.txt放置在exe所在目录中_internal文件夹中,否则会报错。

 (3)双击运行exe文件

运行结果如下:

 由此可见,运行exe文件显示的os.path.abspath(__file__)同py文件中运行该函数,得出的结果不一致,得到的并不是exe文件所在的目录。

2.打包成单文件

(1)使用pyinstaller打包成单文件

(2)将bai.txt拷贝至exe文件所在的目录

(3)双击运行exe文件

运行错误如下,显然不可行:

 

 为什么会报错?解析到临时目录问题。

上图中的C:\\Users\\xunyuan\\AppData\\Local\\Temp\\_MEI429322\\bai.txt是一个临时目录。

三、sys.argv

代码如下:

  1. import sys
  2. import time,os
  3. # 使用sys.argv拼接路径
  4. path2_1=sys.argv[0]
  5. path2_2=os.path.dirname(path2_1)
  6. path2_3=os.path.join(path2_2,'bai.txt')
  7. print(f'sys.argv[0]获取的路径:{path2_1}')
  8. print(f'sys.argv[0]获取的当前:{path2_2}')
  9. print(f'sys.argv[0]拼接后的txt文件路径:{path2_3}')
  10. with open(file=path2_3, mode='r', encoding='utf_8') as f:
  11. text=f.read()
  12. print(text)
  13. for i in range(3):
  14. print(f'程序{3-i}秒后自动退出!')
  15. time.sleep(3)

项目结构目录:同方法一种图片

1.打包成多文件

(1)使用pyinstaller打包成多文件

(2)将bai.txt拷贝至exe文件所在的目录

(3)双击运行exe文件

运行结果如下:

2.打包成单文件

(1)使用pyinstaller打包成单文件

(2)将bai.txt拷贝至exe文件所在的目录

(3)双击运行exe文件

运行结果如下:

四、getattr

代码:

  1. import sys
  2. import time,os
  3. # 使用getattr拼接路径
  4. if getattr(sys,'frozen',False):
  5. path3_1=sys.executable
  6. else:
  7. path3_1=os.path.abspath(__file__)
  8. path3_2=os.path.dirname(path3_1)
  9. path3_3=os.path.join(path3_2, 'bai.txt')
  10. print(f'sys.argv[0]获取的路径:{path3_1}')
  11. print(f'sys.argv[0]获取的当前:{path3_2}')
  12. print(f'sys.argv[0]拼接后的txt文件路径:{path3_3}')
  13. # with open(file='bai.txt',mode='r',encoding='utf_8') as f:
  14. with open(file=path3_3, mode='r', encoding='utf_8') as f:
  15. text=f.read()
  16. print(text)
  17. for i in range(3):
  18. print(f'程序{3-i}秒后自动退出!')
  19. time.sleep(3)

项目结构目录:同方法一种图片

1.打包成多文件

(1)使用pyinstaller打包成多文件

(2)将bai.txt拷贝至exe文件所在的目录

(3)双击运行exe文件

运行结果如下:

2.打包成单文件

(1)使用pyinstaller打包成单文件

(2)将bai.txt拷贝至exe文件所在的目录

(3)双击运行exe文件

运行结果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/981369
推荐阅读
相关标签
  

闽ICP备14008679号