如何修复Python ValueError:错误封送处理数据?

如何修复Python ValueError:错误封送处理数据?,python,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-pac

在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)
$flexget系列忘记“橙色是新的黑色”s03e01
回溯(最近一次呼叫最后一次):
文件“/usr/local/bin/flexget”,第7行,在
从flexget导入主
文件“/usr/local/lib/python2.7/dist-packages/flexget/_-init__.py”,第11行,在
从flexget.manager导入管理器
文件“/usr/local/lib/python2.7/dist-packages/flexget/manager.py”,第21行,在
从sqlalchemy.ext.declarative导入声明性基础
文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative/_-init__.py”,第8行,在
from.api import声明性_base,同义词_for,comparable_using\
文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative/api.py”,第11行,在
从…orm导入同义词作为_orm_同义词\
文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/_-init__.py”,第17行,在
从.mapper导入(
文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py”,第27行,在
从。导入属性
ValueError:封送处理数据错误(未知类型代码)

如果出现该错误,则Python模块的编译版本(即.pyc文件)可能已损坏。Gentoo Linux提供了
Python更新程序,但在Debian中更容易修复:只需删除.pyc文件。如果不知道pyc,只需删除所有文件(作为根):

删除

/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/properties.pyc
如文本所示,它已损坏。您可能必须以
root
身份执行此操作

启动后(再次以root用户身份)运行python(2.7):

重新创建此
.pyc
文件


如果不重新创建
.pyc
文件,则程序的启动速度会比需要的慢,因为加载
.py
文件所需的时间比加载
.pyc
文件所需的时间要长(并且普通用户无法编写
.pyc
文件)如果您有Python 2.7.pyc文件,并且尝试使用Python 3.5加载它们,则可能会发生这种情况。在我的例子中,这是一个第三方tarball,它错误地包含了预编译的Python 2.7.pyc文件以及源代码。

我通过取消安装并重新安装我使用的Python应用程序解决了类似的错误,并且所有依赖于ndencies,使用系统包管理器

在我的例子中,我在Debian 9上使用awscli,错误是“ValueError:bad marshal data(设置大小超出范围)”

我以root用户身份运行:

apt-get purge awscli
apt-get autoremove
apt-get install awscli
然后错误被修正了


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

在使用python 3.7的setuptools中,似乎也出现了某种回归。请参阅示例-

强制重新安装setuptools为我解决了这个问题

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

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

我通过进入设置并使用安装程序修复Python3.7修复了它。 从那以后一切都很好

据我回忆,当我的电脑进入休眠状态时,我一直在运行dash服务器。
可能损坏是在休眠过程中造成的。

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

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


所以只要
pip卸载sqlalchemy
pip安装sqlalchemy
,问题就解决了。

我不确定这个Q是否应该迁移到So或SU。它在请求Python方面的帮助,但是
flextget
似乎更适合SU。我通过删除列出的文件夹中的本地.pyc文件修复了这类错误上图。错误是由于某个地方编译的python文件损坏所致。我们可以将此作为公认的答案@Jamie-m吗?它更一般。当然,这是有效的,但实际上是错误的方法。这就像切断所有肢体以阻止坏疽,以防一个小脚趾坏疽。普通用户无法重新创建
.pyc
这些目录中的文件。这意味着用户加载Python程序的速度会慢一些,很可能永远慢下去,就像从
.py
文件加载一样,因为
.pyc
文件只有在某个根用户(或具有写权限的其他用户)之后才会重新创建运行Python程序,为安装在
/usr
下的所有Python版本加载所有Python模块,这不太可能发生。@Anthon是的,很好,但我不是普通用户。我是管理员(root)用户。删除所有
.pyc
文件并不是最优雅的解决方案,但我不知道实际有多少文件已损坏。我可能是
映射器.pyc
文件、完整的sqlalchemy模块或其他什么。字节码生成时间对我来说微不足道(即使是我的Raspberry Pi 3)。有没有办法创建所有.pyc文件?(无需手动导入它们)@FábioDias尝试
python-m compileall-h
,并提供正确的参数(可能没有)。我知道在stackoverflow上不鼓励这样做,但是:“谢谢!”
apt-get purge awscli
apt-get autoremove
apt-get install awscli
sudo pip3 install --upgrade --force-reinstall setuptools