Подтвердить что ты не робот

Как исправить Python ValueError: плохие данные маршала?

Запуск flexget Python script в Ubuntu, я получаю сообщение об ошибке:

$ flexget series forget "Orange is the new black" s03e01
Traceback (most recent call last):
File "/usr/local/bin/flexget", line 7, in <module>
from flexget import main
File "/usr/local/lib/python2.7/dist-packages/flexget/__init__.py", line 11, in <module>
from flexget.manager import Manager
File "/usr/local/lib/python2.7/dist-packages/flexget/manager.py", line 21, in <module>
from sqlalchemy.ext.declarative import declarative_base
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative/__init__.py", line 8, in <module>
from .api import declarative_base, synonym_for, comparable_using, \
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative/api.py", line 11, in <module>
from ...orm import synonym as _orm_synonym, \
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/__init__.py", line 17, in <module>
from .mapper import (
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 27, in <module>
from . import properties
ValueError: bad marshal data (unknown type code)
4b9b3361

Ответ 1

Если вы получите эту ошибку, скомпилированная версия модуля Python (файл .pyc), вероятно, повреждена. Gentoo Linux предоставляет python-updater, но в Debian более простой способ исправить: просто удалите файл .pyc. Если вы не знаете pyc, просто удалите все из них (как root):

find /usr -name '*.pyc' -delete

Ответ 2

Просто удалите

/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/properties.pyc

он поврежден, как указывает текст. Вероятно, вам придется сделать это как root.

После этого запуска (снова как root) запустите python (2.7):

/usr/bin/python -c "import sqlalchemy.orm.properties"

чтобы воссоздать этот файл .pyc.

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

Ответ 3

Также, похоже, произошла какая-то регрессия в setuptools с использованием Python 3.7. Смотрите пример - https://github.com/pypa/setuptools/issues/1257

Принудительная переустановка setuptools устранила эту проблему для меня.

sudo pip3 install --upgrade --force-reinstall setuptools

Ответ 4

Это может произойти, если у вас есть файлы Python 2.7.pyc, и вы пытаетесь загрузить их с помощью Python 3.5. В моем случае это был сторонний tarball, который ошибочно включал предварительно скомпилированные файлы Python 2.7.pyc вместе с исходным кодом.

Ответ 5

Я решил похожую ошибку, удалив и переустановив приложение Python, которое я использовал, и все зависимости с помощью диспетчера системных пакетов.

В моем случае я использовал awscli в Debian 9, и ошибка была "ValueError: неверные данные маршала (установить размер вне диапазона)".

Я побежал от имени root:

apt-get purge awscli
apt-get autoremove
apt-get install awscli

И тогда ошибка была исправлена.

Я мог бы представить случаи, когда сломанный пакет не удалялся (например, потому что он был помечен как установленный вручную или зависел от другого приложения, все еще установленного), в этих случаях это действие может не устранить ошибку. Однако я подумал, что должен попробовать этот способ, прежде чем вручную удалять файлы .pyc, установленные системой, и мне повезло.

Ответ 6

Я также получил эту проблему в среде Windows (Win 10).

Я исправил это, зайдя в Настройки и восстановив Python 3.7 с его установщиком. С тех пор все отлично работает.

Насколько я помню, я работал на сервере, когда мой компьютер переходил в спящий режим. Может быть, ущерб был нанесен в процессе гибернации как-то.