Является ли файл pickle Python кроссплатформенным? - PullRequest
16 голосов
/ 04 декабря 2009

Я создал небольшой скрипт на python. Я сохранил файл pickle в Linux, а затем использовал его в Windows, а затем снова использовал в Linux, но теперь этот файл не работает в Linux, но он отлично работает в Windows. Это так, что python является coss-платформой, но файл pickle - нет. Есть ли какое-нибудь решение для этого ???

Ответы [ 6 ]

26 голосов
/ 05 декабря 2009

Рассол Python идеально кроссплатформенный.

Вероятно, это связано с различиями EOL (End-Of-Line) между Windows и Linux. Обязательно открывайте файлы Pickle в двоичном режиме как при записи, так и при чтении, используя режимы open () "wb" и "rb" соответственно.

Примечание. Передача солений между разными версиями Python может вызвать проблемы, поэтому попробуйте установить одну и ту же версию на обеих платформах.

10 голосов
/ 05 декабря 2009

Модуль pickle поддерживает несколько различных форматов данных . Если вы указываете определенный формат выбора вместо использования значения по умолчанию (0), вы можете столкнуться с кросс-платформенными проблемами двоичных файлов. Вы можете использовать простые файлы ASCII Pickle, указав протокол 0.

4 голосов
/ 05 декабря 2009

Pickle должен быть кроссплатформенным, есть проблемы с версиями / протоколами (см. http://docs.python.org/library/pickle.html#data-stream-format)), но в целом, если вы используете одну и ту же версию python в своих окнах и Unix-системах, они должны быть совместимы.

Если вы используете pickle в качестве механизма передачи данных, возможно, вы захотите рассмотреть форматы хранения данных с меньшей степенью реализации, такие как json, xml, csv, yaml и т. Д.

4 голосов
/ 04 декабря 2009

Может быть, вы не открываете файл в двоичном режиме? См. этот вопрос о переполнении стека

0 голосов
/ 05 декабря 2009

Одна интересная идея, которую стоит попробовать - это PyON (нотация Python Object). По моим тестам текущая версия работает, по крайней мере, для простых случаев. Похоже, что в списках рассылки были некоторые разногласия относительно того, является ли проект хорошей идеей.

0 голосов
/ 04 декабря 2009

Вы можете использовать json вместо pickle. Если он может сохранить ваши данные, вы знаете, что он кроссплатформенный.

...