【问题标题】:Pyinstaller can't find wcwidth "version.json" when running executable运行可执行文件时,Pyinstaller 找不到 wcwidth “version.json”
【发布时间】:2020-06-02 15:15:13
【问题描述】:

我正在尝试使用 sklearn、pandas、numpy 和 igraph 编译 python 脚本,但 Pyinstaller 可执行文件无法正常运行,因为它在 tmp 文件夹中找不到 version.json。

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Usuario\\AppData\\Local\\Temp\\_MEI106882\\wcwidth\\version.json'
[17248] Failed to execute script pyScript

【问题讨论】:

  • version.json 在那里吗?
  • 我不知道,因为我猜tmp文件夹在出错后几乎立即被删除
  • 我遇到了类似的问题,但是在我的规范中通过数据手动添加了version.json,但是当 wcwidth 尝试打开文件时我遇到了IsADirectoryError,这很奇怪.如果我能找出问题所在,我会发布答案,但也许这会帮助你找到正确的方向。

标签: python pyinstaller


【解决方案1】:

您需要在数据中包含 wcwidth 项目目录,因为它不被视为包或模块,而是一个数据文件。

在您的规范文件中:

...

import wcwidth


a = Analysis(['main.py'],
             pathex=[],
             binaries=[],
             datas=[
                 (os.path.dirname(wcwidth.__file__), 'wcwidth')                 
                 ],
...

注意:上面我使用os.path.dirname(wcwidth.__file__)动态获取wcwidth的目录,但这可以只是.venv/lib/site_packages/wcwidth或安装在哪里,这对我来说对CI至关重要。

或者--add-data:

pyinstaller --add-data "/path/to/site_packages/wcwidth;wcwidth"

【讨论】:

    【解决方案2】:

    我在从虚拟环境创建二进制文件时遇到了这个问题。似乎在虚拟环境中安装 ipython 会导致这种情况。

    在没有 ipython 的情况下重新创建一个新的虚拟环境似乎可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      相关资源
      最近更新 更多