首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在macos上用pyinstaller编译mediapipe的问题

在macos上用pyinstaller编译mediapipe的问题
EN

Stack Overflow用户
提问于 2021-06-08 12:36:44
回答 2查看 2.9K关注 0票数 4

我在通过macos上的pyinstaller编译一个使用mediapipe的项目时遇到了问题。

到目前为止我试过:

代码语言:javascript
复制
pyinstaller  --windowed --noconsole pose_edge.py

pyinstaller  --onefile --windowed --noconsole pose_edge.py

pyinstaller --noconsole pose_edge.py

.app不打开,如果我尝试,就会得到

代码语言:javascript
复制
  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

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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下面添加以下函数:

代码语言:javascript
复制
def get_mediapipe_path():
    import mediapipe
    mediapipe_path = mediapipe.__path__[0]
    return mediapipe_path

然后,在以下几行之后:

代码语言:javascript
复制
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

添加以下使用为二进制文件创建TOC的本机Tree类的行

代码语言:javascript
复制
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提供了功能。

票数 3
EN

Stack Overflow用户

发布于 2022-11-30 20:59:16

如果有人需要在Windows上管理这个问题(也许您可以在MAC或Linux上尝试这个问题),您可以按照以下步骤为我提供解决方案:

  • 访问您的本地Python包(通常在C:/Users/YourUserName/AppData/Local/Python38/Lib/site-packages)中),并在其中找到mediapipe模块(文件夹)。
  • 打开mediapipe>python>solution_base.py文件。
  • 使用以下给定变量编辑solution_base.py文件:

删除这一行(在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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67887088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档