首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnsupportedOperation: fileno --如何修复这个Python依赖关系混乱?

UnsupportedOperation: fileno --如何修复这个Python依赖关系混乱?
EN

Stack Overflow用户
提问于 2015-10-22 15:55:32
回答 2查看 9.4K关注 0票数 3

我正在构建一个非常广泛的Python后端,在服务器A上运行得很好。然后我在一个新的(开发)服务器B上安装了这个系统,我只是从零开始重新安装了所有的pip包。事情似乎很好,所以我做了一个pip freeze。然后我拿起这个列表,升级了服务器A上的软件包。

但是,正如你所预料的那样,我应该更清楚。我没有在机器B上进行足够的测试,所以我遇到了枕头版本3.0.0的问题。所以我降到了1.7.8版。解决了这个问题,bug给了我另一个问题:

代码语言:javascript
复制
File "/home/kramer65/theproject/app/models/FilterResult.py", line 26, in to_json
    self.image.save(b, 'JPEG')
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1437, in save
    save_handler(self, fp, filename)
  File "/usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.py", line 471, in _save
    ImageFile._save(im, fp, [("jpeg", (0,0)+im.size, 0, rawmode)])
  File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 476, in _save
    fh = fp.fileno()
UnsupportedOperation: fileno

现在我有点迷路了。据我所知,这是枕头本身的一个问题,所以我不知道为什么它过去工作,为什么它不再工作。

我在网上四处搜索,但找不到任何解决办法。

有人知道我能做些什么来解决这个问题吗?

ps。PIL没有安装,所以它不是PIL和枕头之间的碰撞

编辑

我刚刚用Python测试了一个import Image (这意味着PIL还在安装中)。令我惊讶的是,它成功了,尽管pip告诉我它没有安装:

代码语言:javascript
复制
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Image
>>> exit()
$ sudo pip uninstall PIL
The directory '/home/hielke/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Cannot uninstall requirement PIL, not installed
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-23 10:20:38

我终于解决了问题。我之所以将枕头的评级从3.0.0降至1.7.8,是因为我在枕头Pypi包索引上看到的唯一两个版本。我终于想起我还有一台服务器,我曾经在它上测试过这段代码,现在它还在运行。一个快速的pip freeze告诉我,它安装了枕头版本的2.3.0。因此,在我的dev服务器上安装它之后,一切又恢复得很好了。

我从中学到了什么?使用pip freeze

票数 2
EN

Stack Overflow用户

发布于 2015-10-23 10:20:30

BytesIO对象在调用其fileno方法时会引发UnsupportedOperation (而不是StringIO所做的AttributeError )--异常没有按应有的方式处理。

这个提交https://github.com/python-pillow/Pillow/commit/197885164b22f82653af514e66c76f4b778c0b1b通过捕获异常在Pillow 3.0.0中修复了这个问题。以下是修复方法。提交的其余部分是对测试套件的更改。

PIL/ImageFile.py

代码语言:javascript
复制
 @@ -29,6 +29,7 @@

 import Image
 import traceback, os
+import io

 MAXBLOCK = 65536

 @@ -475,7 +476,7 @@ def _save(im, fp, tile):
     try:
         fh = fp.fileno()
         fp.flush()
-    except AttributeError:
+    except (AttributeError, io.UnsupportedOperation):
         # compress to Python file-compatible object
         for e, b, o, a in tile:
             e = Image._getencoder(im.mode, e, a, im.encoderconfig)

您可以简单地修补1.7.8以处理异常。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33285330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档