pyinstaller打包python(py)脚本为exe文件时的坑(os和sys)

今天写了一个简单的批处理脚本,为了给没有环境的同事用,通过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

运行exe后出现的异常

下面放上问题代码。

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)
#将其内部文件剪切出来



#删除空文件夹

# %%

猜你喜欢

转载自blog.csdn.net/u010472858/article/details/105499736