easy_install 值错误:坏的marshal数据(未知类型代码)

1 投票
1 回答
4230 浏览
提问于 2025-04-18 15:12

我正在一个独立的环境中构建项目,但遇到了这个错误:

ValueError: bad marshal data (unknown type code)
An error occurred when trying to install djangorestframework-csv 1.3.3. Look above this message for any errors that were output by easy_install.
While:
  Installing django.
  Getting distribution for 'djangorestframework-csv'.
Error: Couldn't install: djangorestframework-csv 1.3.3
make: *** [bin/django] Error 1

我试着在网上搜索,发现五天前也有人报告了同样的问题:

https://github.com/mjumbewu/django-rest-framework-csv/issues/18

这个错误在你尝试

easy_install djangorestframework-csv==1.3.3

经过更多的搜索,我发现这个错误是因为有一些错误的 .pyc 文件导致的。

报告这个问题的人说他通过删除 pycache 解决了这个错误。我试着搜索 pycache,并删除了所有名为 __pycache__ 的文件夹,但这并没有帮助。有没有人知道怎么解决这个问题?

1 个回答

5

创建这个软件包的人不小心把 __pycache__ 这个文件夹也放进了压缩包里。

如果你在使用 buildout 的时候选择了 download-cache 选项,你可以通过打开下载的 djangorestframework-csv-1.3.3.tar.gz 文件,删除这个多余的文件夹来解决这个问题。

你可以在 ${buildout:download-cache}/dist 目录下找到这个文件,然后把它重新打包,去掉那个多余的文件夹:

tar xzvf djangorestframework-csv-1.3.3.tar.gz
rm -rf djangorestframework-csv-1.3.3/rest_framework_csv/__pycache__/
tar czvf djangorestframework-csv-1.3.3.tar.gz djangorestframework-csv-1.3.3

现在再运行一次你的 buildout,它就会使用修复过的缓存文件了。

不过很遗憾,我们不能用 find-links 来指向修复过的版本,因为这个选项只有在默认的包索引(比如 PyPI)没有这个包的时候才会用到。

撰写回答