如何修复Python ValueError:错误的编组数据?

时间:2015-06-15 18:54:49

标签: python

在Ubuntu中运行flexget Python脚本,我收到一个错误:

$ 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)

7 个答案:

答案 0 :(得分:77)

如果您收到该错误,Python模块的编译版本(.pyc文件)可能已损坏。 Gentoo Linux提供python-updater,但在Debian中更容易修复:只需删除.pyc文件即可。如果您不知道pyc,只需删除所有这些(以root身份):

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

答案 1 :(得分:18)

删除

/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文件)。

答案 2 :(得分:5)

如果你有Python 2.7 .pyc文件并尝试使用Python 3.5加载它们,就会发生这种情况。在我的例子中,这是第三方tar​​ball错误地包含预编译的Python 2.7 .pyc文件以及源代码。

答案 3 :(得分:5)

setuptools中似乎还存在与python 3.7一起使用的某种回归方式。查看示例-https://redux.js.org/recipes/structuring-reducers/reusing-reducer-logic

强制重新安装setuptools为我解决了此问题。

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

答案 4 :(得分:0)

我通过使用系统包管理器卸载并重新安装我正在使用的Python应用程序以及所有依赖项,解决了类似的错误。

在我的情况下,我在Debian 9上使用awscli,错误是“ ValueError:错误的元帅数据(设置的大小超出范围)”。

我以root身份运行:

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

然后错误被修复。

我可以想象破损的软件包可能无法删除的情况(例如,因为它被标记为手动安装,或者仍然是另一个应用程序的依赖项),在这种情况下,此操作可能无法解决错误。但是我认为我应该尝试这种方式,然后再手动删除已安装系统的.pyc文件,我很幸运。

答案 5 :(得分:0)

我在Windows环境(win 10)中也遇到了这个问题。

我通过转到“设置”并使用其安装程序修复Python 3.7对其进行了修复。 从那以后一切都很好。

据我所记得,当我的计算机进入休眠状态时,我使仪表板服务器保持运行状态。 也许是在休眠过程中以某种方式造成了损坏。

答案 6 :(得分:0)

我通过以下过程解决了这个问题:

在错误代码消息中,您可以看到 from sqlalchemy.ext.declarative import declarative_base导致此错误。

所以只有pip uninstall sqlalchemypip install sqlalchemy,问题解决了。