You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyInstaller打包facenet_pytorch脚本时遇文件找不到错误求助

问题:PyInstaller打包含facenet_pytorch的Python脚本时丢失权重文件

我的Python脚本依赖以下模块:

import base64

from flask import Flask, request, jsonify

import os

import numpy as np
from PIL import Image
from facenet_pytorch import MTCNN, InceptionResnetV1
from multiprocessing import Pool
import time
import torch

使用PyInstaller打包后,运行可执行文件时出现错误:

FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/4_/xp6410q54xn78hfvvbd7v5lw0000gn/T/_MEIVyuj8j/facenet_pytorch/models/../data/pnet.pt'

环境为Python 3.10虚拟环境,已尝试以下操作但未解决问题:

  1. 添加隐藏导入的打包命令:
pyinstaller --onefile --hidden-import="numpy" --hidden-import="torch" --hidden-import="facenet_pytorch" face_api.py

执行后出现动态库相关警告:

8959 WARNING: Cannot find path ./libtorch.dylib (needed by /Users/abhinandansharma/Desktop/face_api/env/lib/python3.10/site-packages/torchvision/_C.so)
8959 WARNING: Cannot find path ./libtorch_python.dylib (needed by /Users/abhinandansharma/Desktop/face_api/env/lib/python3.10/site-packages/torchvision/_C.so)
8959 WARNING: Cannot find path ./libtorch_cpu.dylib (needed by /Users/abhinandansharma/Desktop/face_api/env/lib/python3.10/site-packages/torchvision/_C.so)
8959 WARNING: Cannot find path ./libc10.dylib (needed by /Users/abhinandansharma/Desktop/face_api/env/lib/python3.10/site-packages/torchvision/_C.so)
  1. 指定site-packages路径打包,警告消失但错误依旧:
pyinstaller --paths "env/lib/python3.10/site-packages" --hidden-import="torch" --hidden-import="facenet_pytorch" --hidden-import="numpy" face_api.py

错误信息更新为:

Traceback (most recent call last):
          File "face_api.py", line 21, in <module>
          File "facenet_pytorch/models/mtcnn.py", line 214, in __init__
          File "facenet_pytorch/models/mtcnn.py", line 34, in __init__
          File "torch/serialization.py", line 771, in load
          File "torch/serialization.py", line 270, in _open_file_like
          File "torch/serialization.py", line 251, in __init__
        FileNotFoundError: [Errno 2] No such file or directory: '/Users/abhinandansharma/Desktop/face_api/dist/face_api/facenet_pytorch/models/../data/pnet.pt'
        [37511] Failed to execute script 'face_api' due to unhandled exception!

解决方案

1. 手动处理facenet_pytorch权重文件

PyInstaller不会自动识别facenet_pytorch的权重文件(pnet.pt、rnet.pt、onet.pt等),需要手动配置打包规则并修改脚本路径:

步骤1:修改脚本中的模型初始化代码

添加路径适配函数,让脚本在打包前后都能正确找到权重文件:

import sys
import os
import torch
from facenet_pytorch import MTCNN, InceptionResnetV1

def get_resource_path(relative_path):
    # 适配PyInstaller打包后的临时目录
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    # 开发环境下的路径
    return os.path.join(os.path.abspath("."), relative_path)

# 手动指定权重路径初始化MTCNN
mtcnn = MTCNN(
    image_size=160, margin=0, min_face_size=20,
    thresholds=[0.6, 0.7, 0.7], factor=0.709, post_process=True,
    device='cuda' if torch.cuda.is_available() else 'cpu',
    pnet_weights=get_resource_path('facenet_pytorch/data/pnet.pt'),
    rnet_weights=get_resource_path('facenet_pytorch/data/rnet.pt'),
    onet_weights=get_resource_path('facenet_pytorch/data/onet.pt')
)

# InceptionResnetV1初始化(若出现权重问题可同理手动指定)
resnet = InceptionResnetV1(
    pretrained='vggface2',
    device='cuda' if torch.cuda.is_available() else 'cpu',
    classify=False
)

步骤2:生成并编辑PyInstaller spec文件

先生成基础spec文件:

pyinstaller --name face_api face_api.py

打开生成的face_api.spec文件,修改datas和hiddenimports配置,将权重文件目录加入打包:

import sys
import os

# 根据虚拟环境路径调整site-packages位置
site_packages_path = os.path.join(sys.executable, '../lib/python3.10/site-packages')

a = Analysis(
    ['face_api.py'],
    pathex=[],
    binaries=[],
    # 添加facenet_pytorch的data目录到打包资源
    datas=[
        (os.path.join(site_packages_path, 'facenet_pytorch/data'), 'facenet_pytorch/data')
    ],
    hiddenimports=['numpy', 'torch', 'facenet_pytorch', 'torchvision'],
    ...
)

步骤3:通过spec文件打包

pyinstaller face_api.spec

2. 解决torch动态库警告

在spec文件的binaries中添加torch相关动态库:

a = Analysis(
    ...
    binaries=[
        (os.path.join(site_packages_path, 'torch/lib/libtorch.dylib'), '.'),
        (os.path.join(site_packages_path, 'torch/lib/libtorch_python.dylib'), '.'),
        (os.path.join(site_packages_path, 'torch/lib/libtorch_cpu.dylib'), '.'),
        (os.path.join(site_packages_path, 'torch/lib/libc10.dylib'), '.')
    ],
    ...
)

3. 验证打包结果

进入dist目录运行生成的可执行文件,确认权重文件加载正常,无FileNotFoundError。


内容的提问来源于stack exchange,提问作者Abhinandan Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:10:04