在尝试编写今天使用PIL的Python脚本的过程中,我发现我似乎没有在我的本地计算机上使用它(OS X 10.5.8,默认2.5 Python安装)。
所以我跑:
easy_install --prefix=/usr/local/python/ pil
它有点抱怨/usr/local/python/lib/python2.5/site-packages尚未存在,所以我创建它,然后再试一次,得到这个:
TEST FAILED:
/usr/local/python//lib/python2.5/site-packages
does NOT support .pth files error: bad
install directory or PYTHONPATH
You are attempting to install a
package to a directory that is not on
PYTHONPATH and which Python does not
read".pth" files from. The
installation directory you specified
(via --install-dir, --prefix, or the
distutils default setting) was:
/usr/local/python//lib/python2.5/site-packages
and your PYTHONPATH environment
variable currently contains:
''
好吧,公平 - 我没有做任何事情来设定路径。所以我给?/ .bash_profile添加了一个快速行:
PYTHONPATH="$PYTHONPATH:/usr/local/python/lib/python2.5"
和source它??,然后再试一次。
相同的错误消息。
考虑到PYTHONPATH显然是固定的,这有点好奇;我可以echo $PYTHONPATH并返回:/usr/local/python/lib/python2.5。我决定从里面查看包含路径的样子:
import sys
print"
".join(sys.path)
产量:
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload
/Library/Python/2.5/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC
其中/usr/local/python/yadda/yadda明显缺失。
不知道我应该在这做什么。如何让python将此位置识别为包含路径?
UPDATE
正如Sven Marnach所说,我忽略了出口PYTHONPATH。我已经纠正了这个问题,现在看到它出现在我从Python中打印出来的sys.path。但是,我仍然得到了上面提到的TEST FAILED错误消息,只是我的新PYTHONPATH环境变量。
因此,我尝试将其从/usr/local/python/lib/python2.5更改为/usr/local/python/lib/python2.5/site-packages,导出并再次运行相同的easy_install命令。这导致一个全新的结果,起初看起来像成功(但不是):
Creating /usr/local/python/lib/python2.5/site-packages/site.py
Searching for pil
Reading http://pypi.python.org/simple/pil/
Reading http://www.pythonware.com/products/pil
Reading http://effbot.org/zone/pil-changes-115.htm
Reading http://effbot.org/downloads/#Imaging
Best match: PIL 1.1.7
Downloading http://effbot.org/media/downloads/PIL-1.1.7.tar.gz
Processing PIL-1.1.7.tar.gz
Running PIL-1.1.7/setup.py -q bdist_egg --dist-dir /var/folders/XW/XWpClVq7EpSB37BV3zTo+++++TI/-Tmp-/easy_install-krj9oR/PIL-1.1.7/egg-dist-tmp--Pyauy
--- using frameworks at /System/Library/Frameworks
[snipped: compiler warnings]
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform darwin 2.5.1 (r251:54863, Sep 1 2010, 22:03:14)
[GCC 4.0.1 (Apple Inc. build 5465)]
--------------------------------------------------------------------
--- TKINTER support available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.
To check the build, run the selftest.py script.
zip_safe flag not set; analyzing archive contents...
Image: module references __file__
No eggs found in /var/folders/XW/XWpClVq7EpSB37BV3zTo+++++TI/-Tmp-/easy_install-krj9oR/PIL-1.1.7/egg-dist-tmp--Pyauy (setup script problem?)
再次,这看起来不错,但是当我去运行我的脚本时:
Traceback (most recent call last):
File"checkerboard.py", line 1, in
import Image, ImageDraw ImportError: No module named Image
当我使用find .检查/usr/local/python/下的内容时,我得到:
./lib ./lib/python2.5
./lib/python2.5/site-packages
./lib/python2.5/site-packages/site.py
./lib/python2.5/site-packages/site.pyc
所以...没有任何模块外观(我假设site.py和site.pyc是元数据或帮助脚本)。安装在哪里?
我注意到这个:
To check the build, run the
selftest.py script.
但是真的不知道那是什么。
我还注意到"没有发现鸡蛋"的消息。这些提示中的任何一个?
你导出PYTHONPATH了吗? 将其设置为shell变量并没有帮助。 尝试export PYTHONPATH="$PYTHONPATH:/usr/local/python/lib/python2.5"并使用env检查它是否真正导出到环境中。
呵呵。 好的,我绝对需要建议,以便更好地理解shell / environment变量和env和export以及source之类的命令。 我很乐意接受建议。 这只是问题的一部分,但是......现在我已经遵循了Sven的建议,这条路似乎在sys.path中得到了认可,但我仍然从简易安装中得到'测试失败'的信息。 我会更新我的问题以反映这一点。
您在OS X中使用Apple提供的Python 2.5;它是一个框架构建,默认情况下,使用/Library/Python/2.5/site-packages作为已安装软件包的位置,而不是/usr/local。通常,您不需要使用OS X框架构建指定--prefix。还要注意Apple提供的OS X 10.5的setuptools(easy_install)也比Python本身的版本旧。
也就是说,在OS X尤其是OS X 10.5上完全正确地安装PIL并不是特别简单。在档案馆或其他地方搜索提示和/或二进制包。特别是如果您计划使用其他模块,如MySQL或Django,我的建议是使用像MacPorts这样的包管理器来安装所有内容(Python和PIL)。
为什么在easy_install调用中指定--prefix?你试过了吗:
sudo easy_install pil
如果您只是尝试将PIL安装到默认位置,我认为easy_install可以找出正确的路径。 (显然,/usr/local/python不是......)
编辑:有人低估了这个答案,也许是因为它太简洁了
。我想,这就是我试图通过手机发布回答的结果。但它的要点是完全有效的,恕我直言:如果你使用--prefix来指定一个带有easy_install的自定义安装位置,你就会"做错了"。有可能使这个工作,但easy_install文档有一个关于自定义安装位置的部分,甚至没有提到这种可能性,除了作为虚拟python选项的小调整。如果你想安装到Mac上的自定义位置,我建议遵循OS X说明,--prefix似乎不适合这项工作。
我通常喜欢将默认安装附带的软件包/库与我安装的软件包/库分开,特别是如果它是我刚接触的东西,通常它是相当实用的。 如果事实证明Python不太实用,也许我会放弃这个想法。
@WestonC,根据您的需要,使用virtualenv可以更好地将"您的"Python模块与系统安装的模块分开。 如果从virtualenv中执行python setup.py install,绝大多数软件包都可以正常安装。 对于那些与virtualenvs不搭配的软件包(如PyQt),你几乎可以使用像本答案中描述的那样的hack来解决这个问题。