我也遇到了这个问题,几分钟前就解决了——到目前为止,我正在以手动方式解决它,但我确信有一种惯用的方法可以在 pyinstaller 中使用规范文件和数据导入。对于这个答案,我假设您没有使用--onefile
pyinstaller 的选项,而是在单个文件夹中创建二进制文件。
也就是说,答案是cp -r
将安装在虚拟环境中的 mediapipe 中的模块目录(或安装初始 mediapipe 包的任何位置,例如 /virtualenvs/pose_record-2bkqEH7-/lib/python3.9/site-packages/mediapipe/modules)复制到您的dist/main/mediapipe
目录。这将使您捆绑的 mediapipe 库能够访问 binarypb 文件,我相信该文件包含姿势检测算法的图形和权重。
UPDATE:我已经找到了一种更惯用的 pyinstaller 方法来让它运行。在里面.spec
pyinstaller 生成的文件,您可以通过以下方式自动添加文件:
在文件的顶部,在block_cipher = None
,添加以下函数:
def get_mediapipe_path():
import mediapipe
mediapipe_path = mediapipe.__path__[0]
return mediapipe_path
然后,在以下几行之后:
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
添加以下使用以下行用于为二进制文件创建目录的原生 Tree 类:
mediapipe_tree = Tree(get_mediapipe_path(), prefix='mediapipe', excludes=["*.pyc"])
a.datas += mediapipe_tree
a.binaries = filter(lambda x: 'mediapipe' not in x[0], a.binaries)
添加后,您可以从 CLI 运行编译命令,例如:pipenv run pyinstaller --debug=all main.spec --windowed --onefile
这使我能够构建一个适用于 mediapipe 的可执行文件。