IDLE和Python在Mac OS X中的路径不同
我正在使用 Mac OS X 10.5.8 系统。我从网站上安装了 Python 2.6,安装在我的应用程序目录里。我修改了我的 .bash_profile 文件,内容是:
# Setting PATH for MacPython 2.6
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:${PATH}"
export PATH
export PATH=/usr/local/mysql/bin:/Library/Frameworks/Python.framework/Versions/2.6/bin:/Library/Frameworks/Python.framework/Versions/2.6/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
export PYTHONPATH=/Users/blwatson/pythonpath:/Users/blwatson/pythonpath/django/bin:$PYTHONPATH
当我在命令提示符下运行 python 时,我可以看到以下内容:
Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39)
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 0, 4, 'alpha', 0)
正在检查 PATH
>>> import sys
>>> sys.path
['', '/Users/blwatson/pythonpath', '/Users/blwatson/pythonpath/django/bin', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/wx-2.8-mac-unicode']
>>>
但是当我在 IDLE 中时,体验就不一样了。
Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39)
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "copyright", "credits" or "license()" for more information.
****************************************************************
Personal firewall software may warn about the connection IDLE
makes to its subprocess using this computer's internal loopback
interface. This connection is not visible on any external
interface and no data is sent to or received from the Internet.
****************************************************************
IDLE 2.6.2
>>> import django
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import django
ImportError: No module named django
>>> import sys
>>> print sys.path
['/Users/blwatson/Documents', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/wx-2.8-mac-unicode']
我完全不知道发生了什么。我从一台笔记本电脑换到另一台,并且做了 TimeCapsule 的备份,所以我知道可能因为这个原因出现了一些冲突。IDLE 是从哪里获取 PATH 的呢?为什么我不能导入 Django 呢?
2 个回答
这似乎是一个常见的问题:
http://www.google.com/search?q=python+idle+pythonpath
可惜的是,没有找到答案。唯一的建议似乎是修改一下 idle
的可执行文件,添加几行 sys.path.insert(...)
的代码。
和所有的 OS X 应用程序一样,如果你双击 IDLE.app
来启动它,就不会涉及到命令行,所以像 bash_profile
这样的配置文件也不会被调用。虽然有一种方法可以通过一个特殊的 属性列表文件(~/.MacOSX/environment.plist
)来设置用户会话的环境变量,但这其实有点麻烦,不太推荐。
幸运的是,还有一个更简单的解决办法:在 OS X 上,你可以通过终端窗口的命令行来启动 IDLE
。这样,它就会像你预期的那样,继承来自那个命令行的环境变量。所以你可以这样做:
$ export PYTHONPATH= ...
$ /usr/local/bin/idle2.6
在 OS X 的 2.6.2 版本之前,IDLE 的启动方式会有各种不一致和问题,所以我建议使用 python.org 提供的 2.6.2 或 3.1 版本,别用更老的版本。
补充说明:我从 open(1)
的手册页看到,自从 10.4 版本以来,通过 open
启动的应用程序也会继承环境变量,所以从命令行启动也是可以的。如果你想避免打开终端窗口,可以很容易地使用 AppleScript 或 Automator 创建一个简单的启动器应用(甚至可以用 Python 和 py2app!)。在这种情况下,使用 open 命令,这样启动器应用就不会一直在那儿待着。例如,在 Automator 中,选择 Run Shell Script
动作,并添加:
export PYTHONPATH= ...
open -a "/Applications/Python 2.6/IDLE.app"
将其保存为文件格式 Application
(在 10.5 中),你就可以点击启动一个定制的 IDLE 了。