Mac下PyInstaller打包可执行文件中os.isdir失效问题
Mac下PyInstaller单文件打包后目录检测为空的原因及解决办法
问题根源
当用pyinstaller --onefile打包Mac程序时,脚本运行和打包后程序运行的当前工作目录环境存在差异:
- 直接运行Python脚本时,你的当前工作目录就是
path指向的目录,os.path.isdir(x)中的x(来自os.listdir(path)的文件名)会基于当前工作目录解析,能正确识别目录。 - 打包成单文件可执行程序后,程序运行时的当前工作目录不一定等于
path,此时x作为相对路径,会基于程序当前的工作目录去查找,而非path目录,导致所有os.path.isdir(x)都返回False,最终existDirs为空。
解决办法
修改代码,将os.listdir(path)返回的文件名与path拼接成完整路径后再判断是否为目录:
import os, sys path = os.path.abspath(os.path.dirname(sys.argv[0])) listFiles = [x for x in os.listdir(path)] # 拼接完整路径后判断目录 existDirs = [x for x in os.listdir(path) if os.path.isdir(os.path.join(path, x))] print(path) print(listFiles) print(existDirs)
验证逻辑
os.path.join(path, x)会生成path目录下每个文件/子目录的完整绝对路径,无论程序当前工作目录是什么,都能准确指向目标位置,确保os.path.isdir的判断结果正确。
内容的提问来源于stack exchange,提问作者Rapid1898
相关产品推荐
相关产品推荐

