如何设置本地python库目录 / PYTHONPATH?

6 投票
2 回答
20334 浏览
提问于 2025-04-16 08:16

今天我在尝试写一个使用PIL的Python脚本时,发现我的电脑上似乎没有安装这个库(我用的是OS X 10.5.8,默认安装的是Python 2.5)。

于是我运行了:

easy_install --prefix=/usr/local/python/ pil

结果它有点抱怨说 /usr/local/python/lib/python2.5/site-packages 这个文件夹还不存在,所以我就创建了这个文件夹,然后再试一次,结果得到了这个错误:

测试失败: /usr/local/python//lib/python2.5/site-packages 不支持 .pth 文件,错误:安装目录不对或者 PYTHONPATH 设置有问题

你试图把一个包安装到一个不在 PYTHONPATH 里的目录,而 Python 也不从这个目录读取 ".pth" 文件。你指定的安装目录(通过 --install-dir、--prefix 或者 distutils 默认设置)是:

/usr/local/python//lib/python2.5/site-packages

而你的 PYTHONPATH 环境变量现在包含:

''

好吧,这说得对——我之前没有设置路径。所以我在 ~/.bash_profile 文件里加了一行:

PYTHONPATH="$PYTHONPATH:/usr/local/python/lib/python2.5"

然后用 source 命令让它生效,再试一次。

结果还是同样的错误信息。

这让我有点奇怪,因为 PYTHONPATH 明明已经设置了;我可以用 echo $PYTHONPATH 查看,结果是 :/usr/local/python/lib/python2.5。我决定从内部检查一下包含路径是什么样的:

import sys
print "\n".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 识别这个位置作为包含路径。

更新

根据 Sven Marnach 的建议,我之前忘记导出 PYTHONPATH 了。我修正了这个问题,现在在 Python 中打印 sys.path 时可以看到它了。不过,我还是收到了之前提到的 测试失败 的错误信息,只不过这次是用我新的 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?)

看起来不错,但当我去运行我的脚本时:

追踪记录(最近的调用最后):
文件 "checkerboard.py",第 1 行,在 import Image, ImageDraw 导入错误:没有名为 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 是元数据或辅助脚本)。安装的内容去哪了?

我注意到这一点:

要检查构建,运行 selftest.py 脚本。

但我并不知道那是什么。

我还注意到“没有找到 eggs”的信息。这两个提示有用吗?

2 个回答

1

你为什么在使用 easy_install 的时候加上了 --prefix 呢?你试过直接这样做吗:

sudo easy_install pil

如果你只是想把 PIL 安装到默认的位置,我觉得 easy_install 应该能找到正确的路径。(显然, /usr/local/python 不是正确的路径…)

编辑:有人给这个回答点了踩,可能是因为太简短了。我想这就是我用手机发回答的结果吧。不过我觉得我的观点是对的:如果你在用 easy_install 时使用 --prefix 来指定一个自定义的安装位置,那你有点“走错路”了。虽然可能可以让它工作,但 easy_install 的文档里有一段关于 自定义安装位置 的内容,根本没有提到这种做法,除了作为对 虚拟 Python 选项的小调整。如果你想在 Mac 上安装到自定义位置,我建议你按照 OS X 的说明 来做, --prefix 似乎并不是合适的工具。

4

你现在使用的是苹果自带的 Python 2.5,这个版本是在 OS X 系统上运行的。它是一个框架版本,默认情况下,会把安装的包放在 /Library/Python/2.5/site-packages 这个地方,而不是 /usr/local。通常情况下,你不需要在 OS X 的框架版本中指定 --prefix。另外要注意,苹果在 OS X 10.5 中提供的 setuptools(也就是 easy_install)版本也比较旧,Python 的版本也是。

不过,在 OS X,尤其是 OS X 10.5 上,完整且正确地安装 PIL 并不是特别简单。你可以在网上搜索一些技巧或者二进制包来帮助你。特别是如果你打算使用其他模块,比如 MySQL 或 Django,我建议你使用像 MacPorts 这样的包管理工具来安装所有东西(包括 Python 和 PIL)。

撰写回答