2015-06-15 19 views
26

在Ubuntu上運行flexget Python腳本,我得到一個錯誤:如何修復Python ValueError:錯誤的編組數據?

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

我不確定這個Q值是否應該遷移到SO或SU。它需要Python的幫助,但是'flextget'似乎更適合SU。 – slm

回答

42

如果收到錯誤,Python模塊的編譯版本(.pyc文件文件)可能已損壞。 Gentoo Linux提供了python-updater,但在Debian中更容易修復:只需刪除.pyc文件。如果你不知道PYC,只是刪除所有的人(如根):

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

適用於Debian系統。 – mainframer

+1

我們可以讓這個被接受的答案@ Jamie-m?這更一般。 – Guillochon

+5

當然這有效,但實際上是錯誤的方法。這就像切割四肢停止壞疽一樣,以防一小趾有壞疽。普通用戶**不能**在這些目錄中重新創建'.pyc'文件。這意味着用戶加載Python程序將會變得更慢,很可能永遠是這樣,因爲這是通過'.py'文件完成的,因爲只有某個根(或者其他具有寫權限的用戶)運行Python時纔會重新創建.pyc文件加載** **/usr'下安裝的所有python模塊的所有python模塊的程序,這是不太可能發生的。 – Anthon

14

只要刪除

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

+0

有沒有辦法創建所有.pyc s? (無需手動導入) –

+2

@FábioDias嘗試'python -m compileall -h'並提供正確的參數(可能沒有)。 – Anthon

1

如果您有Python 2.7 .pyc文件並嘗試使用Python 3.5加載它們,則可能會發生這種情況。在我的情況下,這是一個第三方tar​​ball,它錯誤地包含了預編譯的Python 2.7 .pyc文件以及源代碼。