【问题标题】:Getting Python under control on Mac OS X - setting up environment and libraries在 Mac OS X 上控制 Python - 设置环境和库
【发布时间】:2011-03-30 02:18:14
【问题描述】:

在 Ubuntu Linux 上开始使用 Python 后,我现在已经有一段时间在 Mac 上持续工作,目前是 Mac OS X 10.6。不幸的是,我忽略了对 Python 的安装方式给予适当的关注,结果是:

  • /usr/bin 中的 Python 2.6.1(Mac 默认版本?)(还有 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.test 时遇到了问题通过pip 并且只能从过时的 2.6.1 Python 加载它,而不是我当前的 2.6.5 加载它。 MacPorts 有 python_select,但并没有太大帮助:

reason: chris$ python_select -l
Available versions:
current none python26 python26-apple

我问过的大多数 Python 人都不使用我不太喜欢的 MacPorts,而是使用来自 python.org 的库存 Mac Python。我也听说过系统地使用virtualenv的建议,那么好的实用介绍的链接是什么?

【问题讨论】:

    标签: python macos development-environment


    【解决方案1】:

    这是一个老问题,但我过去一直在努力升级 Python 和虚拟环境。我已经想出了如何让它为我所做的事情工作。希望这会对某人有所帮助。

    设置:
    Mac 运行 10.14
    Python 3.7
    各种包:Pandas、IPython、Paramiko 等。

    Python:
    只需使用他们在Python.org 提供的安装程序。单击 macOS 的“下载”按钮,下载软件包并单击安装程序。完毕。当需要升级到下一个 Python 3 版本时,请重复此过程。
    要在命令行上获取 Python3 解释器而不是 Python2 解释器,请使用 python3 而不是 python

    摆脱较旧的 Python3 版本
    如果您不喜欢保留旧 Python 版本的想法,请打开 Applications 文件夹并将您不想要的旧 Python3 版本拖放到垃圾箱。除非您知道自己在做什么,否则不要对 Python2 版本执行此操作。其中一些是操作系统附带的,如果它们消失可能会造成麻烦。

    安装包:
    如果您想更轻松地安装软件包,@Ned Deily 使用虚拟环境的建议是一个很好的建议。 Python2 的虚拟环境工具是“virtualenv”。该工具在 Python3 中称为“venv”。

    第 1 步:
    创建一个目录来保存所有虚拟环境。这不是必需的,但这就是我跟踪我的方式。我保留了两个名为“virtenvs”和“venvs”的单独目录,具体取决于我是为 Python2 还是 Python3 安装包。对于这个例子,我们将使用 Python3:

    cd ~
    mkdir venvs
    cd venvs

    现在,我以我的项目或已安装的主要包命名我的包。对于此示例,我们将其命名为“project1”:
    venv project1

    第 2 步:
    使用以下命令“激活”虚拟环境。每次启动新终端或会话时都需要这样做。
    source ~/venvs/project1/bin/activate

    Pip变化很大,更新一下
    pip install --upgrade pip

    第 3 步:
    现在您已准备好开始将软件包安装到新的虚拟环境中:
    pip install pandas
    等等

    当您完成或想要切换到不同的虚拟环境时,只需输入:
    deactivate

    接下来是什么:
    浏览 Web 以获取有关 Python 虚拟环境的更多信息。使用这种方法,我没有遇到需要 MacPorts、Anaconda 等的包。毫无疑问,有一些包需要。 YMMV。希望这种方法对您有用。

    【讨论】:

      【解决方案2】:

      我会推荐使用 Homebrew,就像 Python 指南的人一样:

      这是一个很棒的分步指南:

      http://docs.python-guide.org/en/latest/starting/install/osx/#install-osx

      【讨论】:

        【解决方案3】:

        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*
        

        这是一个 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*
        [...]
        

        如果您使用 python.org 安装程序或 MacPorts 安装 2.7 或 3.1 Python,它们都植根于 /Library/Frameworks/opt/local/Library/Frameworks 并且很乐意与其他版本共存。要成功使用框架安装,您需要管理您的 shell PATH。特别是,您应该确保要使用的 Python 的框架 bin 目录位于您的 PATH 上。所以对于 MacPorts,~/.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 实例安装一个单独版本的您最喜欢的 Python 包管理插件(例如 pip 或来自 Distributesetuptoolseasy_install 命令)。每个都安装到默认脚本目录(即框架bin 目录)中。当你安装它的包版本(sudo port install py26-pipsudo port install py31-distribute)时,MacPorts 会自动处理这个问题。请注意,Apple 在 /usr/bin 中为其 Python 提供了一组 easy_install 链接,它们将软件包安装到 /Library/Python。您需要确保使用适合您的 Python 实例的 easy_installpip。确保实例的框架 bin 目录位于 PATH 的首位,以确保这一点。

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

        使用 MacPorts(或类似的基础广泛的分销商)的另一个积极方面是它提供了许多流行的 Python 包包括处理构建和链接到第 3 方 C 库的偶尔混乱的细节,而不是随 Mac OS X 一起提供。例如,MySQLdbPIL 包是 Mac OS X 上常见的绊脚石,因为 MySQL 客户端库和 libjpeg,但 MacPorts 使一切变得更容易。但是您可以选择直接使用 MacPorts (sudo port py26-pil) 或通过 pip (sudo pip install pil) 或 easy_install 安装东西,或者您可以下载源代码并自己安装 (sudo python setup.py ...)。而且由于所有这些方法都使用 Python 的 Distutils 来完成这项繁琐的工作,因此所有这些方法通常最终都会为给定的 Python 实例将包的文件安装在同一位置。

        【讨论】:

        • 感谢您的精彩解释。我有以下子问题。您说:“您需要确保使用适合您的 Python 实例的 easy_install 或 pip。确保实例的框架 bin 目录位于 PATH 的第一个位置,以确保这一点。”我们在这里谈论的是相同的 pip 和相同的 easy_install,只是需要通过在路径的开头添加适当的 bin 来切换 Python。我们不是在谈论安装其他 pip 或 easy_install,对吗?虽然有针对不同版本的 setuptools。至少我是这样读你的两句话的
        • 您需要为每个 Python 实例安装单独的 easy_install 副本;它们可以是 easy_install 的相同版本(特别是如果您使用可以与所有当前版本的 Python 一起安装的最新版本的 Distribute)。用pip 做同样的事情更容易,即为每个Python 实例安装pip 的副本;如easy_install,该命令一般会安装在所用Python对应的bin目录下。但是,pip 确实有一个选项来指定它应该使用哪个 Python,因此您可以使用一个:pip -E /path/to/python
        【解决方案4】:

        我刚刚使用了“pythonbrew”,我在 10.6.7 上使用库存系统 Python 轻松安装了它。我不得不使用“--force”选项来绕过编译后测试,因为我在 test_dl 和 test_readline 上遇到了故障(谷歌快速检查并没有显示这些是一个真正的问题)。

        $ sudo easy_install pythonbrew
        

        安装后,运行它以获取更多说明:

        $ pythonbrew_install
        

        所以我现在有一个很好的隔离 python-2.7.1 安装,而不会干扰系统安装。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-08
          • 2013-11-27
          • 2011-11-22
          • 2011-10-10
          • 2015-11-28
          • 2010-09-20
          相关资源
          最近更新 更多