【问题标题】:How do I set up a local python library directory / PYTHONPATH?如何设置本地 python 库目录/PYTHONPATH?
【发布时间】:2011-05-22 14:02:21
【问题描述】:

今天在尝试编写使用 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 尚不存在,所以我创建它,然后再试一次,得到这个:

测试失败: /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 时,它会显示出来。但是,我仍然收到上面提到的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?)

再一次,这看起来不错,但是当我去运行我的脚本时:

回溯(最近一次通话最后一次):
文件“checkerboard.py”,第 1 行,在 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 是元数据或帮助脚本)。安装到哪里去了?

我注意到这一点:

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

但不知道那是什么。

我还注意到“没有找到鸡蛋”的消息。是这些提示中的任何一个吗?

【问题讨论】:

  • 您导出了PYTHONPATH 吗?只是将其设置为 shell 变量并没有帮助。尝试export PYTHONPATH="$PYTHONPATH:/usr/local/python/lib/python2.5" 并使用env 检查它是否真的导出到环境中。
  • 嗯。好的,我绝对需要一些好的入门建议,以更好地理解 shell/环境变量和命令,如 envexportsource。我很乐意接受建议。不过,这只是问题的一部分......现在我已经遵循了 Sven 的建议,路径似乎在sys.path 中得到了认可,但我仍然从简单安装中收到“测试失败”消息。我会更新我的问题以反映这一点。

标签: python macos path python-imaging-library easy-install


【解决方案1】:

您在 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)。

【讨论】:

    【解决方案2】:

    为什么在 easy_install 调用中指定 --prefix?你试过了吗:

    sudo easy_install pil
    

    如果您只是尝试将 PIL 安装到默认位置,我认为 easy_install 可以计算出正确的路径。 (很明显,/usr/local/python 是不是……)

    编辑:有人否决了这个答案,可能是因为它太简洁了 .我猜这就是我试图用手机发布答案的结果。但它的要点是完全有效的,恕我直言:如果您使用--prefix 来指定带有easy_install 的自定义安装位置,那么您有点“做错了”。 可能 使这项工作成为可能,但easy_install 文档中有一个关于custom installation locations 的部分甚至没有提到这是一种可能性,除非是对virtual python 的一个小调整选项。如果您想安装到 Mac 上的自定义位置,我建议您关注 OS X instructions--prefix 似乎不是适合这项工作的工具。

    【讨论】:

    • 我通常喜欢将默认安装的软件包/库与我安装的软件包/库分开,特别是如果它是我不熟悉的东西,而且通常这样做是相当实用的。如果结果证明 Python 不太实用,也许我会放弃这个想法。
    • @WestonC,根据您的需要,使用virtualenv 将“您的”Python 模块与系统安装的模块分开可能会更好。如果您在 virtualenv 中执行python setup.py install,则绝大多数软件包都可以正常安装。对于那些不适合 virtualenvs 的包(如 PyQt),您几乎总是可以使用this answer 中描述的黑客来解决这个问题。
    猜你喜欢
    • 2011-03-07
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 2012-03-04
    • 2016-03-14
    相关资源
    最近更新 更多