我正在构建一个非常广泛的Python后端,在服务器A上运行得很好。然后我在一个新的(开发)服务器B上安装了这个系统,我只是从零开始重新安装了所有的pip包。事情似乎很好,所以我做了一个pip freeze。然后我拿起这个列表,升级了服务器A上的软件包。
但是,正如你所预料的那样,我应该更清楚。我没有在机器B上进行足够的测试,所以我遇到了枕头版本3.0.0的问题。所以我降到了1.7.8版。解决了这个问题,bug给了我另一个问题:
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告诉我它没有安装:
$ 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发布于 2015-10-23 10:20:38
我终于解决了问题。我之所以将枕头的评级从3.0.0降至1.7.8,是因为我在枕头Pypi包索引上看到的唯一两个版本。我终于想起我还有一台服务器,我曾经在它上测试过这段代码,现在它还在运行。一个快速的pip freeze告诉我,它安装了枕头版本的2.3.0。因此,在我的dev服务器上安装它之后,一切又恢复得很好了。
我从中学到了什么?使用pip freeze!
发布于 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中
@@ -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以处理异常。
https://stackoverflow.com/questions/33285330
复制相似问题