PyInstaller 打包后用 get_script_dir() 找对工作目录
脚本被 PyInstaller 打包后,若仍用 __file__ 推路径,常会落到 %TEMP%\_MEIxxxx。配置、日志、同目录资源就会“找不到”。
写法
import os, sys, logging
def get_script_dir() -> str:
if getattr(sys, "frozen", False):
return os.path.dirname(sys.executable)
return os.path.dirname(os.path.abspath(__file__))
def main(logger=None):
logger = logger or logging.getLogger("app")
current_dir = get_script_dir()
logger.info("当前工作目录: %s", current_dir)
config_path = os.path.join(current_dir, "config.json")
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
main()
区分两种资源
- 与 exe 同目录的用户文件(配置、输出):用
get_script_dir() - 打进包内的静态资源(图标、模板):用
sys._MEIPASS
注意:不要把用户可改配置写进 _MEIPASS;那是临时解包目录,退出后可能消失。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 HT Notes