在Mac OS X上控制Python - 设置环境和库

chr*_*yss 21 python macos development-environment

在Ubuntu Linux上开始使用Python之后,我现在已经很好地完成了我在Mac上的大部分持续工作,目前是Mac OS X 10.6.不幸的是,我忽略了如何适当地关注Python的安装方式,最终得到:

  • Python 2.6.1(Mac默认版本?)中/usr/bin(也是2.5.4,我不确定它是如何实现的)
  • Python的2.6.5通过安装MacPorts的/opt/local/bin/.这是我的默认值
  • pip用来安装库,最终在一些/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/不合适的地方(类似于- SRSLY?)
  • 否则,主要是TextMate和Git进行版本控制.Django和Google App Engine等......

现在我准备设置2.7和3.2,我对随意的状态不满意.那么你最喜欢的组织代码和库的方法是什么,以及你如何将Mac摔跤提交?

我想继续使用pip,但希望有更多的控制权或至少了解哪些库安装了哪些版本,并且可以从哪里访问:我遇到了安装py.testvia的问题,pip只能从中加载它过时的2.6.1 Python,而不是我当前的2.6.5.MacPorts有python_select,但它没有太大的帮助:

reason: chris$ python_select -l
Available versions:
current none python26 python26-apple
Run Code Online (Sandbox Code Playgroud)

我问过的大多数Python人都没有使用我不太喜欢的MacPorts,而是Mac Mac的股票python.org.我也听过virtualenv系统使用的建议,那么实用介绍的链接是什么?

Ned*_*ily 17

virutalenv是一个很棒的工具,对于在大多数平台上管理多个Python实例非常有用.然而,在Mac OS X上,事情变得更复杂,因为使用框架构建使得遇到甚至相同主要版本的Python的多个实例也很常见.我建议您首先了解并熟悉如何在深入研究之前在Mac OS X上管理框架安装virtualenv.

" /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/- SRSLY?"

是的,这是Python Mac OS X框架构建中的默认位置.Mac OS X上的大多数Python分销商都使用框架构建,每个框架构建通常使用不同的根,因为它可以更简单地支持多个版本并将特定Python实例的所有网站包保存在一个地方.

对于Mac OS X 10.6,Apple提供了Python 2.6(根据/System/Library/Frameworks/Python.framework和符号链接/usr/bin/python2.6)以及Python 2.5(为了与Mac OS X 10.5兼容 - 这就是/usr/bin/python2.5你所看到的).python.org Mac OS X安装程序安装到/Library/Frameworks/Python.framework.MacPorts使用/opt/local/Library/Frameworks/Python.framework.

框架包括一个bin目录(在../Versions/x.x/bin框架中); 这通常是安装包脚本的默认位置.它也是放置解释器二进制文件的符号链接的地方.

下面是一个安装了多个Python版本的python.org样式框架:

$ 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*
Run Code Online (Sandbox Code Playgroud)

这是一个MacPorts,bin包括许多其他网站包:

$ 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*
[...]
Run Code Online (Sandbox Code Playgroud)

如果您使用python.org安装程序或MacPorts安装2.7或3.1 Pythons,它们都是根植于/Library/Frameworks/opt/local/Library/Frameworks将与其他版本共存.要成功使用框架安装,您需要管理shell PATH.特别是,您应该确保bin要使用的Python 的框架目录在您的PATH.所以对于MacPorts,这样的事情~/.bash_profile:

export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin:/opt/local/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

或者对于python.org安装程序:

export PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

此外,通常您需要为您使用的每个Python实例安装您喜欢的Python包管理附加组件的单独版本(例如pipeasy_install来自Distribute或的命令setuptools).每个都安装在默认的脚本目录(即框架bin目录)中.当您安装软件包(sudo port install py26-pipsudo port install py31-distribute)版本时,MacPorts会自动处理这些问题.请注意,Apple 为其Pythons 提供了一组easy_install链接,/usr/bin并将它们安装到/Library/Python.你需要确保你使用easy_installpip适合您的Python的实例.确保实例的框架bin目录是第一个PATH确保.

请注意,如果您使用MacPorts,则可以使用其python_select命令来管理指向的Python实例/opt/local/bin/python.然后,如果/opt/local/bin在PATH列表中出现比其他目录更早出现python它将控制哪个是您的默认值python.但是你真的需要通过添加框架bin目录来管理PATH,所以python_select通常不是那么有用.

使用MacPorts(或类似的基于广泛的分发服务器)的另一个积极方面是它提供了许多流行的Python软件包,包括处理构建和链接到Mac OS X未附带的第三方C库的偶然混乱细节.例如,MySQLdbPIL包是因为MySQL客户端库和Mac OS X上频繁的绊脚石libjpeg,但MacPorts的使得它更容易获得的一切权利.但您可以选择使用MacPorts(sudo port py26-pil)或via pip(sudo pip install pil)直接安装easy_install,或者您可以下载源代码,并自己动手(sudo python setup.py ...).而且因为所有这些都是使用Python的Distutils 要做脏工作,所有这些方法通常最终会在给定Python实例的同一个地方安装包的文件.