【问题标题】:Python app created via Pyinstaller does not run通过 Pyinstaller 创建的 Python 应用程序无法运行
【发布时间】:2019-10-28 10:31:00
【问题描述】:

我制作了一个简单的单文件脚本,希望与最终用户共享。我发现 Pyinstaller 完成了这项工作,所以我重构了我的项目结构。

我有一个项目目录。在里面,我有一个包有一个空的__init__.py 和一个__main__.py 与实际的脚本,其中包含一些库,如opencv-python、numpy 等。在项目之外,我有一个 setup.py 和从__main__.py 导入主函数并调用它的入口点脚本。

然后我在 --onefile 模式下使用 PyInstaller 针对这个入口点创建了可执行文件。当我在我的机器上使用创建的可执行文件时,它可以完美地完成这项工作,但是当我将它发送给最终用户时,它最终会出现错误(见下文)。我不太确定这个错误是什么意思,但我看到了通往我的开发环境的路径,而这些路径在其他机器上不应该存在。看起来它缺少依赖项,但我认为 PyInstaller 将这些依赖项捆绑到可执行文件中。

我在这里缺少什么?我在 StackOverflow 中阅读了很多关于这里的问题,但我找不到解决方案。

我在最新的 macOS 上使用 PyCharm 在 PyCharm 创建的 venv 中开发了这个脚本。 venv 文件夹位于项目目录中 - 我不知道这可能是个问题。

Traceback (most recent call last):
  File "PyInstaller/loader/rthooks/pyi_rth_pkgres.py", line 11, in <module>
  File "/Users/hordon/Documents/DEV/projects/scan_detect/venv/lib/python3.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module
  File "setuptools-40.8.0-py3.7.egg/pkg_resources/__init__.py", line 33, in <module>
  File "/Users/hordon/Documents/DEV/projects/scan_detect/venv/lib/python3.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module
  File "platform.py", line 116, in <module>
  File "/Users/hordon/Documents/DEV/projects/scan_detect/venv/lib/python3.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module
  File "subprocess.py", line 153, in <module>
ImportError: dlopen(/var/folders/wk/cwx1b16j50z5_yt1ynq82hr00000gn/T/_MEI7eUUkV/select.cpython-37m-darwin.so, 2): Symbol not found: ____chkstk_darwin
  Referenced from: /var/folders/wk/cwx1b16j50z5_yt1ynq82hr00000gn/T/_MEI7eUUkV/select.cpython-37m-darwin.so (which was built for Mac OS X 10.15)
  Expected in: /usr/lib/libSystem.B.dylib
 in /var/folders/wk/cwx1b16j50z5_yt1ynq82hr00000gn/T/_MEI7eUUkV/select.cpython-37m-darwin.so
[15314] Failed to execute script pyi_rth_pkgres

【问题讨论】:

  • 最终用户是否与您使用相同的操作系统?
  • 您找到解决方案了吗?

标签: python pyinstaller


【解决方案1】:

我也有同样的问题,可惜是mac os的问题。所以,如果你想支持不同版本的mac os,你需要在最旧版本的mac os上构建你的应用程序。

“在 Mac OS X 中,来自一个操作系统版本的组件通常与更高版本兼容,但它们可能无法与更早版本兼容。

确定您的应用支持旧版 Mac OS X 的唯一方法是在您需要支持的旧版操作系统中运行 PyInstaller。”

https://pyinstaller.readthedocs.io/en/stable/usage.html#making-mac-os-x-apps-forward-compatible

【讨论】:

    猜你喜欢
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多