json pickle.load会给出与JAX相关的错误,无论如何

cqoc49vn  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(111)

晚上好,我首先要说的是,我是一个完全的编码新手,虽然在我的工作中没有严格的要求,但如果能更好地了解它,那将是一个很大的奖励。我目前正在将pickle文件转换为JSON,我确实在互联网上找到了一些python脚本(我想我能够阅读)。但是,我在执行pickle.load命令时总是遇到错误。这是我从互联网上获取的一个示例脚本:

Pickle2JSON is a simple Python Command Line program for converting Pickle file to JSON file.
Arguments: Only one (1) argument is expected which is the pickle file.
Usage: python pickle2json.py myfile.pkl
Output: The output is a JSON file bearing the same filename containing the JSON document of the converted Pickle file.
# import libraries
import pickle
import json
import sys
import os
# open pickle file
with open(sys.argv[1], 'rb') as infile:
    obj = pickle.load(infile)
# convert pickle object to json object
json_obj = json.loads(json.dumps(obj, default=str))
# write the json file
with open(
        os.path.splitext(sys.argv[1])[0] + '.json',
        'w',
        encoding='utf-8'
    ) as outfile:
    json.dump(json_obj, outfile, ensure_ascii=False, indent=4)

制作人:Git
每当我运行这个或其他类似的脚本时,我得到:

Traceback (most recent call last):
  File "C:\Users\geu19\Desktop\convert.py", line 16, in <module>
  obj = pickle.load(infile)
        ^^^^^^^^^^^^^^^^^^^
  ModuleNotFoundError: No module named 'jax._src.device_array'

我已经安装了jax和jaxlib(都是0.4.13,而python是3.11.2),已经尝试了不同的版本,但都没有用。有人能帮忙吗我已经完全卡在这几天,也许这是一些愚蠢的,我仍然不明白。谢谢
我试着改变了python和jax包的版本。我希望有一个JSON文件,我感到沮丧和头痛。

bt1cpqcv

bt1cpqcv1#

一般来说,pickle只有在您将pickle文件加载到与保存文件的环境完全相同的环境中时才能安全使用。这是因为序列化使用了可能在包版本或Python版本之间发生变化的对象详细信息。
在本例中,看起来您将pickle文件保存在JAX版本0.3.X的运行时中(当JAX数组类型为DeviceArray时),并试图在JAX版本0.4.X的运行时中加载它(其中DeviceArray已替换为jax.Array;参见更改日志)。
您应该能够通过安装JAX版本0.3.25或更早的版本来修复这个问题。为了避免将来出现这种困难,您可以考虑使用更稳定的数组序列化方法,例如jax.numpy.save,它使用NumPy .npy文件格式。

相关问题