【问题标题】:json.load / simplejson.load fails in packaged Python app (PyInstaller or cx_freeze)json.load / simplejson.load 在打包的 Python 应用程序(PyInstaller 或 cx_freeze)中失败
【发布时间】:2014-07-30 16:02:24
【问题描述】:

我有一个命令行 Python 应用程序,它加载在命令行上指定的 JSON 文件:

with open(sys.argv[1]) as f:
    data = json.load(f)

当使用系统 Python 解释器按原样运行应用程序时,这一切都很好,但一旦通过 PyInstaller 或 cx_freeze 打包到 EXE 中,我就会收到以下错误:

Traceback (most recent call last):
  File "<string>", line 92, in <module>
  File "c:\Users\user\Documents\build\main\out00-PYZ.pyz\simplejson"
, line 444, in load
  File "c:\Users\user\Documents\build\main\out00-PYZ.pyz\simplejson"
, line 501, in loads
  File "c:\Users\user\Documents\build\main\out00-PYZ.pyz\simplejson.
decoder", line 370, in decode
  File "c:\Users\user\Documents\build\main\out00-PYZ.pyz\simplejson.
decoder", line 389, in raw_decode
simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

当使用内置的 json 模块时,我得到另一个错误:

ValueError: No JSON object could be decoded

已知有问题的 JSON 文件是有效的,可以从 REPL 毫无问题地加载。

有人对问题可能是什么有想法吗?

更新 1: 奇怪的是,当我将 sys.argv[1] 替换为硬编码的文件名时,一切正常。我已确认 sys.argv[1] 正确映射到冻结应用程序中的文件名。

更新 2:我已经确认异常是在 json.load 调用 succeeds 之后引发的 - 在可以到达之后立即插入一个打印语句。 p>

更新 3: 误报!这个应用程序使用 Flask,事实证明我启用了调试模式,这导致自动重新加载器尝试使用不正确的参数再次运行 main() 块。

【问题讨论】:

  • 可以在 SO 上发布您自己的问题的答案并将其标记为已接受 - 这有助于其他用户知道您的问题已解决,而无需加载问题 :)

标签: python json windows pyinstaller cx-freeze


【解决方案1】:

虚惊一场!这个应用程序使用 Flask,事实证明我启用了调试模式,这导致自动重新加载器尝试使用不正确的参数再次运行 main() 块。

如果您将任何类型的打包程序用于 FLask 应用,请确保禁用调试模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2018-08-20
    • 2022-11-16
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多