virutalenv
是一个很好的工具,对于在大多数平台上管理多个Python实例非常有用。不过,在MacOSX上,情况更为复杂,因为使用框架构建使得即使是同一主要版本的Python,也经常遇到多个实例。我建议您在深入研究之前,首先了解并熟悉如何管理MacOSX上的框架安装
virtualenv
.
"
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
-“是吗?”
框架构建
对于macosx10.6,苹果提供了python2.6(源于
/System/Library/Frameworks/Python.framework
符号链接到
/usr/bin/python2.6
/usr/bin/python2.5
/Library/Frameworks/Python.framework
. MacPorts使用
/opt/local/Library/Frameworks/Python.framework
.
这些框架包括
bin
目录(位于
../Versions/x.x/bin
在框架内);这通常是安装包脚本的默认位置。它也是放置到解释器二进制文件的符号链接的地方。
下面我们来看看python.org-安装了多个Python版本的样式框架:
$ cd /Library/Frameworks/Python.framework/Versions/
$ ls -l
total 8
drwxrwxr-x 8 root admin 340 Dec 23 2008 2.5/
drwxrwxr-x 8 root admin 340 Aug 10 21:42 2.6/
drwxrwxr-x 8 root admin 340 Jul 3 12:24 2.7/
drwxrwxr-x 7 root admin 306 Mar 23 17:42 3.1/
drwxrwxr-x 7 root admin 306 Aug 10 22:14 3.2/
lrwxr-xr-x 1 root admin 3 Aug 10 21:47 Current@ -> 2.6
$ cd 2.6
$ ls -l
total 7776
lrwxr-xr-x 1 root admin 17 Aug 10 21:47 Headers@ -> include/python2.6
drwxrwxr-x 3 root admin 102 Aug 10 21:42 Mac/
-r-xrwxr-x 1 root admin 3973552 Aug 10 21:41 Python*
drwxrwxr-x 4 root admin 170 Aug 10 21:48 Resources/
drwxrwxr-x 2 root admin 578 Aug 12 15:19 bin/
drwxrwxr-x 3 root admin 102 Aug 10 21:42 include/
drwxrwxr-x 3 root admin 646 Aug 10 21:43 lib/
drwxrwxr-x 3 root admin 102 Aug 10 21:41 share/
$ ls -l bin
total 264
-rwxrwxr-x 1 root admin 150 Aug 10 21:41 2to3*
-rwxr-xr-x 1 nad admin 360 Aug 12 15:19 easy_install*
-rwxr-xr-x 1 nad admin 368 Aug 12 15:19 easy_install-2.6*
lrwxr-xr-x 1 root admin 7 Aug 10 21:47 idle@ -> idle2.6
-rwxrwxr-x 1 root admin 138 Aug 10 21:41 idle2.6*
lrwxr-xr-x 1 root admin 8 Aug 10 21:47 pydoc@ -> pydoc2.6
-rwxrwxr-x 1 root admin 123 Aug 10 21:41 pydoc2.6*
lrwxr-xr-x 1 root admin 9 Aug 10 21:47 python@ -> python2.6
lrwxr-xr-x 1 root admin 16 Aug 10 21:47 python-config@ -> python2.6-config
-rwxrwxr-x 1 root admin 29584 Aug 10 21:43 python2.6*
-rwxrwxr-x 1 root admin 1463 Aug 10 21:42 python2.6-config*
lrwxr-xr-x 1 root admin 10 Aug 10 21:47 pythonw@ -> pythonw2.6
-rwxrwxr-x 1 root admin 29584 Aug 10 21:43 pythonw2.6*
lrwxr-xr-x 1 root admin 11 Aug 10 21:47 smtpd.py@ -> smtpd2.6.py
-rwxrwxr-x 1 root admin 18272 Aug 10 21:41 smtpd2.6.py*
这是一个MacPorts
箱子
$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.6
$ ls -l bin
total 952
-rwxr-xr-x 2 root wheel 160 Jul 15 01:56 2to3*
-rwxr-xr-x 2 root wheel 1541 Jun 8 19:59 apirst2html.py*
-rwxr-xr-x 2 root wheel 363 Oct 5 2009 bdist_mpkg*
[...]
-rwxr-xr-x 2 root wheel 211 Jun 2 12:45 django-admin.py*
-rwxr-xr-x 2 root wheel 410 Jul 15 17:30 easy_install*
-rwxr-xr-x 2 root wheel 418 Jul 15 17:30 easy_install-2.6*
[...]
-rwxr-xr-x 2 root wheel 368 Jun 24 02:00 pip*
-rwxr-xr-x 1 root wheel 342 Sep 18 2009 pkginfo*
[...]
lrwxr-xr-x 1 root wheel 9 Jul 15 01:58 python@ -> python2.6
lrwxr-xr-x 1 root wheel 16 Jul 15 01:58 python-config@ -> python2.6-config
-rwxr-xr-x 2 root wheel 24932 Jul 15 01:57 python2.6*
-rwxr-xr-x 2 root wheel 1473 Jul 15 01:57 python2.6-config*
[...]
如果使用安装2.7或3.1 pythonpython.org 安装程序或MacPorts,它们都植根于
/Library/Frameworks
/opt/local/Library/Frameworks
很高兴与其他版本共存。要成功使用框架安装,您需要管理shell
PATH
. 特别是,您应该确保
箱子
要使用的Python目录位于
路径
~/.bash_profile
export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin:/opt/local/bin:$PATH
或者是为了python.org 安装人员:
export PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:$PATH
另外,通常需要安装一个单独版本的Python包管理附加组件(如
pip
或者
easy_install
命令来自
Distribute
或
setuptools
箱子
sudo port install py26-pip
或
sudo port install py31-distribute
). 请注意,苹果提供了一套
中的链接
/usr/bin
为它的python和他们安装包
/Library/Python
. 你需要确保你使用
易于安装
或
皮普
适合您的Python实例。确保实例的框架
路径
注意,如果您使用MacPorts
可以
python_select
命令来管理所指向的Python实例
/opt/local/bin/python
. 那么如果
/opt/local/bin
python
它将支配你的默认
python
. 但是您确实需要通过添加框架来管理路径
箱子
python\u选择
一般来说并不是那么有用。
包括
处理构建和链接到MacOSX未附带的第三方C库时偶尔出现的混乱细节。例如
MySQLdb
和
PIL
由于MySQL客户机库和
libjpeg
,但MacPorts使一切都变得更容易。但是您可以选择直接使用MacPorts安装(
sudo port py26-pil
)或通过
皮普
(
sudo pip install pil
易于安装
,或者您可以下载源代码,自己动手(
sudo python setup.py ...
). 因为所有的封面下都使用Python的
Distutils
为了完成这些肮脏的工作,所有这些方法通常都会在给定Python实例的相同位置安装包的文件。