pyinstaller打包python(py)脚本为exe文件时的坑(os和sys)
程序员文章站
2024-02-07 16:34:10
...
今天写了一个简单的批处理脚本,为了给没有环境的同事用,通过pyinstaller -F xxx.py进行打包成可执行的单个exe文件
py文件在调试的时候一切正常,但是打包成exe文件以后,运行出现一闪而退的现象。最后通过cmd命令 .\xxx.exe的方式,发现出现WinError 123错误,通过排查,发现pyinstaller打包后,os.path、sys.path为空,或者会是一些想不到的值,肯定会有其原理,但是这里没有深究。
可以自行打包测试如下代码:
import sys
import os
print(sys.path[0])
print(sys.argv[0])
print(os.path.dirname(os.path.realpath(sys.executable)))
print(os.path.dirname(os.path.realpath(sys.argv[0])))
————————————————
版权声明:本文为CSDN博主「买菇凉的小火披」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_31801903/article/details/81666124
下面放上问题代码。
import os
import sys
import shutil
import time
#%%
#获取当前路径下所有文件夹
#os.path.abspath(__file__)
#1.获取当前文件所在路径
now_path = os.path.abspath(__file__)
print(now_path)
#切换工作路径到当前的空间
os.chdir(now_path)
#显示文件夹名
folders_path = os.listdir()
#判断文件数量,筛选获取只有1个文件的文件路径
#folder_name_noly_one = []
#%%
for i in folders_path:
path = now_path + '\\' + i
if os.path.isdir(i) and len(os.listdir(i)) == 1:
file_path = path + '\\' + os.listdir(i)[0]
#os.path.abspath(os.listdir(i))
#i = os.path.abspath(os.listdir(i))
#folder_name_noly_one.append(i)
shutil.move(file_path,now_path)
os.rmdir(path)
else:
continue
print('运行完成!')
time.sleep(5)
#将其内部文件剪切出来
最后修改后的代码
#%%
import os
import sys
import shutil
import time
import tkinter as tk
from tkinter import filedialog
#%%
#获取当前路径下所有文件夹
#os.path.abspath(__file__)
#1.获取当前文件所在路径
now_path = filedialog.askdirectory()
print(now_path)
#切换工作路径到当前的空间
os.chdir(now_path)
#显示文件夹名
folders_path = os.listdir()
#判断文件数量,筛选获取只有1个文件的文件路径
#folder_name_noly_one = []
#%%
for i in folders_path:
path = now_path + '\\' + i
if os.path.isdir(i) and len(os.listdir(i)) == 1:
file_path = path + '\\' + os.listdir(i)[0]
#os.path.abspath(os.listdir(i))
#i = os.path.abspath(os.listdir(i))
#folder_name_noly_one.append(i)
shutil.move(file_path,now_path)
os.rmdir(path)
else:
continue
print('运行完成!')
time.sleep(5)
#将其内部文件剪切出来
#删除空文件夹
# %%