Python 在不同Windows版本上使用pickle反序列化datetime对象

Python 在不同Windows版本上使用pickle反序列化datetime对象,python,datetime,serialization,pickle,Python,Datetime,Serialization,Pickle,我有一个字典,我想序列化和反序列化: dict = { datetime.datetime.strptime('2016-10-01', '%Y-%m-%d'): { 'product1': 3300.00, }, datetime.datetime.strptime('2016-10-05', '%Y-%m-%d'): { 'product1': 3000.00, 'product2': 3000.50 },

我有一个字典,我想序列化和反序列化:

dict = {
    datetime.datetime.strptime('2016-10-01', '%Y-%m-%d'): {
        'product1': 3300.00,
    },
    datetime.datetime.strptime('2016-10-05', '%Y-%m-%d'): {
        'product1': 3000.00,
        'product2': 3000.50
    },
    datetime.datetime.strptime('2016-10-09', '%Y-%m-%d'): {
        'product1': 2700.00,
        'product2': 2800.50,
        'product3': 3600.00
    },
    datetime.datetime.strptime('2016-10-15', '%Y-%m-%d'): {
        'product1': 2500.00,
        'product2': 2700.00,
        'product4': 666.00
    }
}
我正在使用以下命令序列化和反序列化词典:

def get_current_datafile():
    with open(name='datafile.raw', mode='rb') as input_handle:
        input_dict = pickle.loads(input_handle.read())
    return input_dict

def write_datafile(new_dict):
    with open(name='datafile.raw', mode='wb') as output_handle:
        pickle.dump(new_dict, output_handle)
当我在一个环境中使用序列化文件时,它可以正常工作。但是,当我试图在另一台机器上反序列化同一个文件时,Python环境以完全相同的方式设置,它不起作用,给了我一个回溯,声称我没有安装datetime模块,这当然不是真的

Traceback (most recent call last):
  File "scraper.py", line 92, in <module>
    Scraper().main()
  File "scraper.py", line 32, in main
    input_dict = self.get_current_datafile()
  File "scraper.py", line 82, in get_current_datafile
    input_dict = pickle.loads(input_handle.read())
  File "Python\lib\pickle.py", line 1388, in loads
    return Unpickler(file).load()
  File "Python\lib\pickle.py", line 864, in load
    dispatch[key](self)
  File "Python\lib\pickle.py", line 1096, in load_global
    klass = self.find_class(module, name)
  File "Python\lib\pickle.py", line 1130, in find_class
    __import__(module)
ImportError: No module named datetime
回溯(最近一次呼叫最后一次):
文件“scraper.py”,第92行,在
Scraper().main()
文件“scraper.py”,第32行,在main中
input\u dict=self.get\u current\u datafile()
获取当前数据文件中第82行的文件“scraper.py”
input\u dict=pickle.load(input\u handle.read())
加载文件“Python\lib\pickle.py”,第1388行
返回Unpickler(file.load())
加载文件“Python\lib\pickle.py”,第864行
调度[键](自身)
文件“Python\lib\pickle.py”,第1096行,在load\u global中
klass=self.find_类(模块,名称)
文件“Python\lib\pickle.py”,第1130行,在find_类中
__导入(模块)
ImportError:没有名为datetime的模块

我所知道的环境之间的唯一区别是Windows版本-一台计算机正在运行:

  • Python 2.7.12
  • 泡菜机。72223
  • windows7x64
另一个正在运行:

  • Python 2.7.12
  • 泡菜机。72223
  • windows10x64


问题是:我应该如何配置我的环境,以便在它们之间一致地序列化和反序列化文件?我刚刚遇到了这个问题。问题是pickle文件中的行尾。windows下的Python2.7.13只需换行即可保存它们

在第二台机器上,我正在从GIT检索它们,用于windows的Tortoise GIT正在自动将行尾从仅换行转换为回车/换行


因此,请确保行尾不会在机器之间转换。当我转换回仅换行时,导入错误就消失了。

我使用的临时解决方法是将日期保存为纯文本字符串,并在反序列化后用datetime包装它们。