遇到的坑二:文件找不到(路径不对),包括配置文件找不到,excel文件找不到等等

 

python打包之后,有一个奇怪的特点,直接说不好说,就结合下面代码来说一说:

代码目录结构如下:

aa.py:

运行结果如下:

直接在Pycharm里运行出来的,路径确实是文件所在路径没有错,excel文件内容页读取到了,万事大吉

然后打包

打包中。。。。。。。

打包好了之后,运行看看

 

 

运行结果:

嗯哼?什么情况,路径怎么变成了这样乱七八糟的,不出所料,excel文件也读取不成功了,这也是配置文件。日志文件等别的文件也读取失败的原因,即如果是打包的话,直接用 下面这种获取路径的方法,获取到的路径就会是C:xxx/xxx 就不是真正的路径

1
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

解决方法1:

如果要获取真正的路径的话,就要用下面方法:获取到真正路径后os.path.realpath(sys.executable), 一层一层上找,找到顶层目录,然后再往下拼接需要的文件路径

 self.script_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(sys.executable))))  # 顶层目录
 relative_path = os.path.join(self.script_path, 'file_log\excel\下载.xls')  # 与excel表格路径拼接

发现没问题了

方法2: 这样就解决了文件递归的问题,只需要把exe运行文件和其他基础信息文件放在同一目录下就ok了

script_path =os.path.dirname(os.path.realpath(sys.argv[0]))
#sys.argv[0] 当前运行文件的路径。打包成exe文件后,代表exe文件当前的路径,
#
os.path.realpath(sys.argv[0]) 变成绝对路径。如果不变成绝对路径,打包成exe后sys.argv[0]表示运行文件的相对路径
#os.path.dirname(os.path.realpath(sys.argv[0])) 找到运行文件的父目录(上一级目录),打包成exe后,表示exe文件的父目录。
relative_path = os.path.join(self.script_path, 'excel\下载.xls')  # 打包成exe后,表示从exe文件的父目录下的exel文件中的下载.xls表格

 



 方法3:

if getattr(sys, 'frozen', False):  # 通过反射,如果没有找到'frozen',说明为exe程序。否则是python可执行文件
    script_path = os.path.dirname(sys.executable) 说明为exe程序
else:
script_path
= os.path.dirname(os.path.abspath(__file__)) 否则是python可执行文件

 

posted @ 2023-07-11 11:08  徐俊112  阅读(332)  评论(0)    收藏  举报