0
0 комментариев

При выполнении одной и той же команды, на разных платформах модуль shelve генерирует файл(ы) с разными расширениями. Если же нужно более подробно:

s = shelve.open("test", writeback=True)

При выполнении вот такой команды, получается следующий результат:

  1. На linux-base системах генерируется один файл с названием «test»
  2. На MacOS генерируется один файл с названием «test.db»
  3. На Windows генерируются три файла, каждый с названиями «test.dir», «test.dat» и «test.bak»

Этот факт печалит и сильно мешает работе кода с использованием чтения файла, сгенерированного с помощью модуля shelve на разных платформах.

В поисках ответа на вопрос: «Да как так-то?!», я наткнулся на вот эту страницу с англоязычного stackoverflow. Как я понял (а увы, мои познания в английском не столь велики), проблема в том, что модуль shelve использует (основан на) модуль anydbm, который, в свою очередь, является программным интерфейсом использования системных реализаций баз данных, таких как dbhash, gdbm, dbm и dumbdbm. Далее, на этой же странице указано, что реализация бд, которая генерирует по три файла — это dumbdbm.

Из всего, что я смог перевести на этой странице, я предположил, что проблема в несовместимости реализаций баз данных на разных системах. Я предпринял попытку установки gdbm на windows отсюда. Предпринял также попытку добавить папку, содержащую бинарники с gdbm в PATH, но этого видно не достаточно, чтобы shelve на windows могла читать shelve-файлы, которые сгенерированы в linux-base системе.

В общем, вопрос: как исправить сие недоразумение?


Добавить комментарий