欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

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

下面放上问题代码。

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



#删除空文件夹

# %%