使用virtualenv或buildout安装PIL时的问题

71 投票
4 回答
42425 浏览
提问于 2025-04-15 20:39

当我使用 easy_install 或 buildout 安装 PIL 时,它的安装方式让我必须用 'import Image',而不能用 'from PIL import Image'。

但是,如果我用 "apt-get install python-imaging" 或者 "pip -E test_pil install PIL",一切都正常。

下面是我尝试在虚拟环境中安装 PIL 的一些例子:

# virtualenv --no-site-packages test_pil
# test_pil/bin/easy_install PIL
# test_pil/bin/python
Python 2.5.1 (r251:54863, Feb  6 2009, 19:02:12) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named PIL

我发现,easy_install 会把 PIL 打包成一个 Egg,而 PIP 则不会。buildbot 也是这样,它使用的是 eggs。

我该如何正确地使用 easy_install 或 buildout 来安装 PIL 呢?

4 个回答

8

在Ubuntu系统上,我发现需要为我的Python版本(2.7)安装一个C语言头文件包。

sudo apt-get install python2.7-dev

之后,pip install pil就可以正常使用了。

79

使用 Pillow:一个“友好的”PIL分支 :-) 它提供了:

  • 完全兼容setuptools
  • 更新速度更快
  • 没有与PIL不同的图像代码更改(也就是说,它的目标是跟踪所有PIL的图像代码更改,并且不会在不报告的情况下做自己的更改。)
  • 提供Windows版本

如果PIL将来真的能做到Pillow现在做的事情,那么这个分支就会消亡。在那之前,我们有Pillow。

免责声明:我是这个分支的作者,Pillow的创建主要是为了让我的工作更轻松(不过看到其他人也在使用它真的很不错)。

编辑:Pillow 2.0.0在2013年3月15日发布。它支持Python 3,并修复了许多bug和增强功能。虽然我们仍然努力跟踪上游的PIL变化,但(这可能是好事也可能是坏事,取决于你的看法)Pillow已经开始与PIL有所不同。

95

在pypi上发布的PIL版本(由作者提供)和setuptools不兼容,因此不容易通过easy_install安装。有人在其他地方创建了可以轻松安装的版本。目前,你需要指定一个find-links的链接,并使用pip来获取一个好的包:

pip install --no-index -f http://dist.plone.org/thirdparty/ -U PIL

使用pip install并加上--no-index选项,可以避免找到PIL的原始版本(这个版本可能有问题)。如果你使用easy_install,你必须直接链接到一个修正过的版本的源文件;因为easy_install还是固执地使用PyPI的链接,而不是find-links的链接:

easy_install http://dist.plone.org/thirdparty/PIL-1.1.7.tar.gz

要在buildout中包含PIL,可以指定一个相同版本的egg,或者使用版本部分:

[buildout]
parts =
find-links =
    http://dist.plone.org/thirdparty/
eggs =
    PIL
versions = versions

[versions]
PIL = 1.1.7

编辑于2011年3月:解决打包问题的修复已经合并到PIL的开发树中,所以这个解决方法可能很快就不再需要了。

编辑于2013年2月:直接使用Pillow就好了。:-) 显然,等待原始包修复并没有带来好结果。

撰写回答