我在通过macos上的pyinstaller编译一个使用mediapipe的项目时遇到了问题。
到目前为止我试过:
pyinstaller --windowed --noconsole pose_edge.py
pyinstaller --onefile --windowed --noconsole pose_edge.py
pyinstaller --noconsole pose_edge.py.app不打开,如果我尝试,就会得到
Traceback (most recent call last):
File "pose_edge.py", line 26, in <module>
File "mediapipe/python/solutions/selfie_segmentation.py", line 54, in __init__
File "mediapipe/python/solution_base.py", line 229, in __init__
FileNotFoundError: The path does not exist.
[36342] Failed to execute script pose_edge我和conda一起工作,我的env是python 3.8,mediapipe 0.8.5和OSX 10.15.7
提前感谢
发布于 2021-06-15 12:38:45
我也遇到了这个问题,几分钟前我就发现了--到目前为止,我正在用手动的方式解决这个问题,但我确信在pyinstaller中使用规范文件和数据导入有一种惯用的方法。对于这个答案,我假设您不是对pyinstaller使用--onefile选项,而是在一个文件夹中创建二进制文件。
尽管如此,答案是从安装在虚拟环境中的mediapipe (或安装了初始mediapipe包的任何地方,例如/virtualenvs/pose_record-2bkqEH7-/lib/python3.9/site-packages/mediapipe/modules)到dist/main/mediapipe目录中的任何地方)中安装cp -r模块目录。这将使您的捆绑媒体库访问二进制文件,我认为,其中包含图形和权重的姿态检测算法。
更新:,我已经找到了一种让它运行的更实用的pyinstaller方法。在pyinstaller生成的.spec文件中,您可以通过以下方式自动添加文件:
在文件的顶部,在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)添加以下使用为二进制文件创建TOC的本机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提供了功能。
发布于 2022-11-30 20:59:16
如果有人需要在Windows上管理这个问题(也许您可以在MAC或Linux上尝试这个问题),您可以按照以下步骤为我提供解决方案:
删除这一行(在261处)-> os.sep.join(os.path.abspath(file).split(os.sep):-3) = root_path
我们将创建root_path,而不是这一行:
"C:\Users\YourUserName\AppData\Local\Programs\Python\Python38\Lib\site-packages“= root_path
复制并粘贴这一行。更改您的用户名!
.exe输出可能需要作为管理员运行!
通过这种方式,您可以解决root_path问题。
您不需要使用任何PyInstaller配置。只需键入:
PyInstaller yourscriptname.py -onefile
https://stackoverflow.com/questions/67887088
复制相似问题