Mac OS 未预装任何在 Unix/Linux 中常见的命令行包管理工具,Mac OS 中的 App Store 和自身的软件升级功能可以下载更新许多比较好的应用,但这些应用多数是满足普通消费者需求,对于开发人员而言,命令行包管理工具才是王道。

Mac OS中主要有三种包管理工具:MacPorts,Homebrew,Fink。

这里简要说一下三者区别:

  1. MacPorts:因为 Mac OS 源自 BSD,因此将 BSD 中的 Port 移植到 OS 成为 MacPorts 就一点不奇怪。MacPorts 会独立于 OS 自建一套仓库树,OS 的包执行目录为 /usr/local,而 MacPorts 的包执行目录为 /opt/local。MacPorts 尽量不影响系统现有程序,自然也就尽量少复用系统已有程序。MacPorts 安装包的过程是下载该程序的所有源文件及其依赖包,然后在本地进行 Build 生成最终的可执行文件。这样做的好处是在系统中存在一套独立的生态环境,从而不影响系统自身的生态环境,缺点就是浪费了系统自身的生态资源。

  2. Homebrew:在 Lion 之后兴起的包管理工具,工作方式与 MacPorts 类似,下载源代码然后本地 Build。不同之处在于 Homebrew 采取与 MacPorts 截然相反的态度,对系统资源是最大程度的利用,因此可以说 Homebrew 是直接对现有系统生态环境进行修改,所有包也是直接安装到现有的生态环境中,这样做的好处是节约了系统资源,但缺点是每一次操作都是直接对系统进行修改,严重依赖和影响现有系统。

  3. Fink:基于 Debian 的 packaging tools,它下载的都是已编译后的二进制可执行文件(或源码),因此无需本地编译,即下即用。缺点是所有包都需要 Fink 预先编译,导致更新速度跟不上。

使用 MacPorts 和 Homebrew 都需要预装 XCode Command Line Tools,即意味着还需要提前预装 XCode。(根据官方文档来看,Fink 安装比较新的工具包时,因为提前编译完成所以无需依赖 XCode,但对于一些不是二进制的包,如果需要本地编译,还是需要依赖 XCode。换而言之,如果想在 OS 中编译源码,都需要 XCode 提供支持。)

正题:如何使用 MacPorts 安装并使用 Python 和 pip?

环境:Mac OS X Mavericks

我的 Mavericks 自带 Python 版本有 python25, python26, python27。本人目前使用的是 Python 2.7.6,Mavericks 携带的是 Python 2.7.5。

1. 检查当前使用的是哪个 Python:

$ which python
/usr/bin/python $ whereis python
/usr/bin/python $ python

Python 2.7.5 (default, Aug 25 2013, 00:04:04)

[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>>

  可以看到当前为 Mavericks 自带的 Python 2.7.5。

2. 使用 port search 查找一下目标资源:

$ port search python | grep python27
dbus-python27 @0.84. (devel, python)
gnome-python27-extras @2.25. (gnome, python)
ice-python27 @3.4.2_3 (devel, python)
protobuf-python27 @2.4.1_1 (devel)
python27 @2.7. (lang)
python27-doc @2.7.2_1 (lang)
subversion-python27bindings @1.8. (devel, python) $ port search python | grep pip
Lightweight pipelining: using Python functions as pipeline jobs.
py-pip @1.5. (python, www)
py-pipedream @0.2.0_1 (python)
python module for easy communication over pipes
Plumbum (Latin for lead, which was used to create pipes back in the day) is a small yet feature-rich library for shell script-like programs in Python.
py24-pipedream @0.2.0_1 (python)
python module for easy communication over pipes
py25-pip @1.3.1_1 (python, www)
Lightweight pipelining: using Python functions as pipeline jobs.
py26-pip @1.5. (python, www)
Lightweight pipelining: using Python functions as pipeline jobs.
py27-pip @1.5. (python, www)
Plumbum (Latin for lead, which was used to create pipes back in the day) is a small yet feature-rich library for shell script-like programs in Python.
py31-pip @1.5. (python, www)
Lightweight pipelining: using Python functions as pipeline jobs.
py32-pip @1.5. (python, www)
Lightweight pipelining: using Python functions as pipeline jobs.
py33-pip @1.5. (python, www)
Plumbum (Latin for lead, which was used to create pipes back in the day) is a small yet feature-rich library for shell script-like programs in Python.
py34-pip @1.5. (python, www)
Plumbum (Latin for lead, which was used to create pipes back in the day) is a small yet feature-rich library for shell script-like programs in Python.

3. 选择自己需要的 Python 版本和 pip 版本进行安装。事实上在这里我略过了安装 python27 @2.7.6 (lang),直接安装 py27-pip @1.5.4 (python, www),因为之前说过,MacPorts 会自动安装所需的工具及其依赖包。因此在安装 py27-pip 的过程中,会自动安装 python27。

$ sudo port install py27-pip
Password:
---> Computing dependencies for py27-pip
---> Cleaning py27-pip
---> Scanning binaries for linking errors: 100.0%
---> No broken files found.

  到此就完成了 Python 2.7.6 和 pip 的安装。注意:因在本文之前我已经装过 py27-pip,因此以上示例仅做示意,如果你未使用 MacPorts 安装过 py27-pip 或 python27,你看到的输出内容应与此不同。另外如果你是首次使用 MacPorts 进行工具包的安装,MacPorts 会有一个初次 build 仓库树的过程,需耐心等待。

4. 如果此时使用 which 命令查看 python 版本,你依然看到的是系统自带版本,而使用 pip 命令时会得到找不到该命令的提示。

$ which python
/usr/bin/python

 

  这是因为你尚未设置默认启用的 python 和 pip 文件。需要启用某个版本的程序可以通过 port select 命令来查看和选择,想了解 select 命令可以使用 $man port 进行查看。

$ man port
...
select
For a given group, selects a version to be the default by creating appropriate symbolic links. For instance, python might be linked to python2.. Available select groups are installed as subdi-
rectories of ${prefix}/etc/select/. To list the available versions in a group, use --list. To see which version is currently selected for a group, use --show. To change the selected version for
a group, use --set. For example: port select --list python
port select --show gcc
port select --set gcc mp-gcc44
...

  MacPorts 会对不同版本的同一个程序进行分组,每个版本都有一个专属的名称,通过指定组名和专属名称就可以启用特定版本的程序。

让我们看一下 python 的分组:

$ port select --list python
Available versions for python:
none (active)
python25-apple
python26-apple
python27
python27-apple

  现在我们启用刚安装的 python27,这需要 sudo 权限:

$ port select --set python python27
Selecting 'python27' for 'python' failed: could not create new link "/opt/local/bin/python" pointing to "/opt/local/bin/python2.7": permission denied $ sudo port select --set python python27
Password:
Selecting 'python27' for 'python' succeeded. 'python27' is now active. $ port select --list python
Available versions for python:
none
python25-apple
python26-apple
python27 (active)
python27-apple $ which python
/opt/local/bin/python $ python
Python 2.7. (default, Nov , ::)
[GCC 4.2. Compatible Apple LLVM 5.0 (clang-500.2.)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

  可以看到第一次没有 sudo 权限,操作失败。设置成功后会显示 python27 处于激活状态。同理,启用 pip:

$ port select --list pip
Available versions for pip:
none (active)
pip27 $ sudo port select --set pip pip27
Selecting 'pip27' for 'pip' succeeded. 'pip27' is now active. $ port select --list pip
Available versions for pip:
none
pip27 (active) $ pip Usage:
pip <command> [options] Commands:
install Install packages.
uninstall Uninstall packages.
freeze Output installed packages in requirements format.
list List installed packages.
show Show information about installed packages.
search Search PyPI for packages.
wheel Build wheels from your requirements.
zip DEPRECATED. Zip individual packages.
unzip DEPRECATED. Unzip individual packages.
bundle DEPRECATED. Create pybundles.
help Show help for commands. General Options:
-h, --help Show help.
-v, --verbose Give more output. Option is additive, and can be used up to times.
-V, --version Show version and exit.
-q, --quiet Give less output.
--log-file <path> Path to a verbose non-appending log, that only logs failures. This log is active by default at /Users/Xavier/.pip/pip.log.
--log <path> Path to a verbose appending log. This log is inactive by default.
--proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port.
--timeout <sec> Set the socket timeout (default seconds).
--exists-action <action> Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
--cert <path> Path to alternate CA bundle.

至此,你就可以使用 python 2.7.6 和 pip 了。

补充:Homebrew 不会覆盖那些应该原生安装在 OS X 中的文件。这就是说如果某个原生包有了更新,Homebrew 会通知你而不是自行覆盖它。它也可以将包安装在用户自己的目录下,如此一来你就不用使用 sudo 来进行安装,这种安装方式意味着所有访问路径对你来说都是有效的,因此可以摆脱对系统库的依赖。另外 Homebrew 有一个活跃的社区,因此更新非常快。

[OSX] 使用 MacPorts 安装 Python 和 pip 指南的更多相关文章

  1. windows下面安装Python和pip终极教程

    在大二的时候接触过一段时间的Python,最近又开始玩起了这门语言.总的来说,个 人很喜欢Python的语言风格,但是这门语言对于windows并不算很友好,因为如果是初学者在windows环境下安装 ...

  2. 转: windows下面安装Python和pip终极教程

    原文: http://www.cnblogs.com/yuanzm/p/4089856.html 因为如果是初学者在windows环境下安装,简直是折磨人,会遇到各种蛋疼的情况.本文希望提供傻瓜式的教 ...

  3. windows下面安装Python和pip

    windows下面安装Python和pip 安装Python 第一步,我们先来安装Python, https://www.python.org/downloads/ 这里选择的是2.7.10 第二步. ...

  4. Python学习 windows下面安装Python和pip(一)

    windows下面安装Python和pip 安装Python 第一步,我们先来安装Python, https://www.python.org/downloads/ 这里选择的是2.7.10 第二步. ...

  5. 安装Python和pip

    windows下面安装Python和pip终极教程 在大二的时候接触过一段时间的Python,最近又开始玩起了这门语言.总的来说,个人很喜欢Python的语言风格,但是这门语言对于windows并不算 ...

  6. 安装python的pip模块

    安装python的pip模块 网址https://pypi.python.org/pypi/pip 选择,点击下载 将文件解压到C:\Users\Administrator\AppData\Local ...

  7. linux 安装python,pip,

    Linux下python升级步骤 http://www.cnblogs.com/lanxuezaipiao/archive/2012/10/21/2732864.html 在 https://www. ...

  8. linux 安装python 和pip

    下载文件 python官网:https://www.python.org/downloads/ 百度网盘http://pan.baidu.com/s/1mixGB12     密码   9nzu [r ...

  9. linux下安装python和pip

    注意:不要轻易去卸载原有的python环境,因为有些软件是依赖他的 一:安装前,先将依赖环境一并安装,避免后面重复编译 [root@redhat2 bin]# yum install gcc g++ ...

随机推荐

  1. Qt中使用的C++知识和技能-你必须要了解的

    如果你不确定在使用Qt编程时自己所掌握的C++知识是否够用,这一节的内容会帮到你.这里给出了Qt自身以及在使用Qt进行编程时涉及到的C++知识,因此,通过阅读本节,你会了解你是否缺少一些C++技能. ...

  2. Linux系统查看系统是32位还是64位方法总结 in 创新实训

    这篇博客是总结.归纳查看Linux系统是32位还是64位的一些方法,很多内容来自网上网友的博客.本篇只是整理.梳理这方面的知识,方便自己忘记的时候随时查看. 方法1:getconf LONG_BIT ...

  3. 关于Unity中坐标系的种类

    坐标空间 1:物体空间: 3D物体自己的坐标空间 一般设计时几何体以中心为原点,人物以双脚为原点; 2: 世界空间: 3D物体在场景中的世界坐标, 整个游戏场景的空间; 3: 摄像机空间: 以观察摄像 ...

  4. Linux之查看切换Shell

    1.查看存在的shell cat /etc/shells 2.查看使用的shell echo $SHELL 3.切换shell 切换bash chsh -s /bin/bash 切换zsh chsh ...

  5. JUnit4参数化测试实例

    在JUnit中,可以同时使用@RunWith 和 @parameter 注解来为单元测试传递参数. 注意: 在Eclipse中因为版本问题,可能无法使用@parameters(name = " ...

  6. 使用Maven构建项目

    要构建一个基于Maven的项目,打开控制台,进入到 pom.xml 文件所放的项目文件夹,并发出以下命令: mvn package 这将执行Maven的“package”阶段. Maven构建生命周期 ...

  7. 多媒体开发之h264中的sps---sps信息提取之帧率

    ------------------------------author:pkf -----------------------------------------time:2015-8-20 --- ...

  8. CI框架 -- 开发环境、生产环境

    开发者常常希望当系统运行在开发环境或生产环境中时能有不同的行为, 例如,在开发环境如果程序能输出详细的错误信息将非常有用,但是在 生产环境这将造成一些安全问题. ENVIRONMENT 常量 Code ...

  9. 地形系统lod

    参考其他引擎,地形有近到远进行越来越深的lod,基本完成 下面是u3d的,觉得原理应该是一样的

  10. VCL 中的 Windows API 函数(5): AlphaBlend

    AlphaBlend 是指定图像混合透明的函数, 在 Graphics.GraphUtil.RibbonStyleActnCtrls 单元用到. 下面的测试是把一张图片显示在窗体, 并可以调整透明度. ...