【问题标题】:What is the most compatible way to install python modules on a Mac?在 Mac 上安装 python 模块最兼容的方式是什么?
【发布时间】:2010-11-15 20:50:27
【问题描述】:

我开始学习 python 并喜欢它。我主要在 Mac 和 Linux 上工作。当我使用 apt-get 安装 python 模块时,我发现在 Linux(主要是 Ubuntu 9.04)上它工作正常。我可以毫无问题地导入它。

在 Mac 上,我习惯于使用 Macports 来安装所有 Unixy 的东西。但是,我发现我安装的大多数 python 模块都没有被 python 看到。我花了一些时间玩 PATH 设置和使用 python_select 。什么都没有真正奏效,在这一点上我还没有真正理解,我只是在闲逛。

我的印象是 Macports 在管理 python 模块方面并不普遍。我想使用更“被接受”(如果这是正确的话)的方法重新开始。

那么,我想知道,Mac python 开发人员使用什么方法来管理他们的模块?

额外问题:

你使用苹果的python,还是其他版本? 你是从源代码编译所有东西,还是有一个运行良好的包管理器(Fink?)。

【问题讨论】:

  • 不久前在 Ars Technica 上有一篇关于为 Mac OS X 打包 PyQt 应用程序的好文章:arstechnica.com/open-source/guides/2009/03/…
  • MacPorts 非常适合 Mac 上的 Python。注意:您需要通过 MacPorts 安装 Python 包,以便将它们安装到您的 MacPorts Python 安装中。您也可以在不使用 MacPorts 的情况下安装软件包;但是,您需要在安装软件包之前通过 python_select 将该版本的 python 设置为默认版本。如果您安装包然后使用 python_select,它不会有任何区别,因为它会安装到安装时默认的 Python 版本。

标签: python macos module packages macports


【解决方案1】:

你有没有调查过easy_install?它不会同步你的 macport 或类似的东西,但它会自动下载最新的包和所有必要的依赖项,即

easy_install nose

对于鼻子单元测试包,或

easy_install trac

用于trac 错误跟踪器。

在他们的EasyInstall 页面上也有更多信息。

【讨论】:

  • easy_install 没问题。请注意,就像您可能安装了多个版本的 python 一样,安装多个版本的 easy_install 很容易,每个版本都与不同的 python 安装/版本相关联。您只需要确保您了解您正在调用哪个(哪个(1)可以提供帮助)。
【解决方案2】:

当您使用 MacPorts 安装模块时,它不会进入 Apple 的 Python 版本。而是将这些模块安装到所选 Python 的 MacPorts 版本上。

您可以使用名为python_select 的mac 端口更改默认使用的Python 版本。指令here.

另外,还有easy_install。它将使用 python 来安装 python 模块。

【讨论】:

  • python_select 现已弃用,请参阅更新的答案。
【解决方案3】:

管理 python 包的最流行的方法(如果您不使用系统包管理器)是使用 setuptools 和 easy_install。它可能已经安装在您的系统上。像这样使用它:

easy_install django

easy_install 使用Python Package Index,这对于python 开发人员来说是一个了不起的资源。看看周围有哪些可用的软件包。

更好的选择是pip,它正在获得牵引力,因为它尝试将fix a lot of the problems 与easy_install 关联。 Pip 使用与 easy_install 相同的包存储库,它只是工作得更好。真正需要使用 easy_install 的唯一时间是这个命令:

easy_install pip

之后,使用:

pip install django

在某些时候,您可能想了解一下virtualenv。如果您在包需求冲突的项目上进行大量 python 开发,virtualenv 是天赐之物。它将允许您拥有各种包的完全不同版本,并根据您的需要在它们之间轻松切换。

关于使用哪个 python,坚持使用 Apple 的 python 将不会让您头疼,但如果您需要更新的版本(我相信 Leopard 是 2.5.1),我会选择 macports python 2.6。

【讨论】:

  • 我最近重建了我的机器并转而只使用 Homebrew 和 PIP,突然间我所有的构建问题都消失了。
【解决方案4】:

我将easy_install 与 Apple 的 Python 一起使用,它的工作原理就像一个魅力。

【讨论】:

    【解决方案5】:

    关于使用哪个 python 版本,Mac OS 通常会提供旧版本的 python。升级到较新版本是个好主意。您可以从 http://www.python.org/download/ 下载 .dmg。如果这样做,请记住更新路径。你可以在这里找到确切的命令http://farmdev.com/thoughts/66/python-3-0-on-mac-os-x-alongside-2-6-2-5-etc-/

    【讨论】:

      【解决方案6】:

      请参阅Python OS X development environment。最好的方法是使用MacPorts。下载并安装 MacPorts,然后通过 MacPorts 在终端中输入以下命令来安装 Python:

      sudo 端口安装 python26 python_select sudo 端口选择 --set python python26

      sudo 端口安装 python30 python_select sudo 端口选择 --set python python30

      使用第一组命令安装 Python 2.6,使用第二组命令安装 Python 3.0。然后使用:

      sudo port install py26-packagename

      sudo port install py30-packagename

      在上述命令中,将packagename替换为包名,例如:

      sudo 端口安装 py26-setuptools

      这些命令将为给定的 Python 版本自动安装包(及其依赖项)。

      有关 Python 可用包的完整列表,请键入:

      港口清单 | grep py26-

      港口清单 | grep py30-

      您使用哪个命令取决于您选择安装的 Python 版本。

      【讨论】:

      • 郑重声明,在最近的 MacPorts 版本中,sudo python_select python30 已替换为 sudo port select --set python python30
      【解决方案7】:

      使用 MacPorts Python 安装没有任何问题。如果您正在从 MacPorts 安装 python 模块但没有看到它们,这可能意味着您没有调用您安装到的 MacPorts python。在终端 shell 中,您可以使用绝对路径来调用可能安装的各种 Python。例如:

      $ /usr/bin/python2.5         # Apple-supplied 2.5 (Leopard)
      $ /opt/local/bin/python2.5   # MacPorts 2.5
      $ /opt/local/bin/python2.6   # MacPorts 2.6
      $ /usr/local/bin/python2.6   # python.org (MacPython) 2.6
      $ /usr/local/bin/python3.1   # python.org (MacPython) 3.1
      

      默认情况下,要获得正确的 python,需要确保您的 shell $PATH 设置正确,以确保首先找到正确的可执行文件。另一种解决方案是为各种 python 定义 shell 别名。

      正如其他人所建议的那样,安装 python.org (MacPython) 也很好。 easy_install 可以提供帮助,但由于每个 Python 实例可能有自己的 easy_install 命令,请确保您调用了正确的 easy_install

      【讨论】:

      • 如果他使用 MacPorts,使那个版本的 Python 成为默认的正确方法是不要弄乱 PATH,而是安装“python_select”并让它自动切换必要的符号链接来实现默认的 Python 版本。
      • python_select 只管理 /opt/local/bin 中的 python 符号链接,并且不能保证 /opt/local/bin 位于 $PATH 中的 /usr/local/bin 或 /usr/bin 之前(尽管 MacPorts 的初始安装尝试这样做)。关键是,在有多个可用版本的情况下,仅使用“python”甚至“python2.5”一般来说有点废话:除非你知道 $ ,否则你不知道最终会使用哪个 Python PATH 陷阱和/或使用绝对路径。
      【解决方案8】:

      我使用 MacPorts 将 Python 和 MacPorts 跟踪的任何第三方模块安装到 /opt/local,并将任何手动安装的模块(不在 MacPorts 存储库中)安装到 /usr/local,这从未引起任何问题.我认为您可能对某些 MacPorts 脚本和环境变量的使用感到困惑。

      MacPorts python_select 用于选择 Python 的“当前”版本,但它与模块无关。例如,这允许您使用 MacPorts 安装 Python 2.5 和 Python 2.6,并在安装之间切换。

      $PATH 环境变量影响加载的 Python 模块。 $PYTHONPATH 是您正在寻找的。 $PYTHONPATH 应该指向包含要加载的 Python 模块的目录。就我而言,我的$PYTHONPATH 变量包含/usr/local/lib/python26/site-packages。如果您使用 MacPorts 的 Python,它会为您设置其他适当的目录,因此您只需将 additional 路径添加到 $PYTHONPATH。但同样,$PATH 在 Python 搜索您已安装的模块时根本不会使用。

      $PATH 用于查找可执行文件,因此如果您安装 MacPorts 的 Python,请确保 /opt/local/bin 在您的 $PATH 中。

      【讨论】:

        【解决方案9】:

        对于 MacPython 安装,我在这篇博文中找到了解决 setuptools (easy_install) 问题的有效解决方案:

        http://droidism.com/getting-running-with-django-and-macpython-26-on-leopard

        一个方便的技巧包括找出终端中哪个版本的 python 处于活动状态:

        which python
        

        【讨论】:

          【解决方案10】:

          如果您使用 MacPorts 中的 Python,它有自己的 easy_install,位于:/opt/local/bin/easy_install-2.6(即 py26)。与直接调用 easy_install 不一样,即使你使用 python_select 更改了默认的 python 命令。

          【讨论】:

          • pip 相同。通过我的 MacPorts 设置,我运行 pip-2.6(位于 /opt/local/bin/ 中)来安装与 MacPorts python 配合得很好的 python 模块。您可以sudo port install py2.6-pip获取pip。
          【解决方案11】:

          您的问题已经存在三年了,还有一些其他答案未涵盖的细节:

          我认识的大多数人都使用HomeBrewMacPorts,我更喜欢MacPorts,因为它干净利落地切割了默认Mac OS X 环境和我的开发设置。只需移出您的 /opt 文件夹并使用普通用户 Python 环境测试您的包

          MacPorts 只能在 Mac 中移植,但通过 easy_install 或 pip,您将学习如何在任何平台(Win/Mac/Linux/Bsd...)中设置您的环境。此外,它总是会更新并包含更多软件包

          我个人让 MacPorts 处理我的 Python 模块以保持一切更新。像任何其他高级包管理器(即:apt-get)一样,它对于具有大量二进制依赖项的模块的繁重工作要好得多。我无法使用easy_install 或pip 构建我的Qt 绑定(PySide)。 Qt 非常庞大,需要大量编译。一旦你想要一个需要非 Python 程序使用的库的 Python 包,尽量避免使用 easy_install 或 pip

          在某些时候,您会发现 MacPorts 中缺少一些包。我不相信 MacPorts 会给你整个CheeseShop。比如最近需要Elixir模块,但是MacPorts只提供py25-elixir和py26-elixir,没有py27版本。在这种情况下,您有:

          pip-2.7 install --user elixir

          (确保你总是输入 pip-(version) )

          这将在您的主目录中构建一个额外的 Python 库。是的,Python 将使用多个库位置:一个由 MacPorts 控制,一个用户本地一个用于 MacPorts 中缺少的所有内容。

          现在请注意,我更喜欢 pip 而不是 easy_install。您应该避免使用 setuptools 和 easy_install 是有充分理由的。这是good explanation,我尽量远离他们。 pip 的一个非常有用的功能是为您提供使用 MacPorts、easy_install 和 pip 本身安装的所有模块(及其版本)的列表:

          pip-2.7 冻结

          如果您已经开始使用 easy_install,请不要担心,pip 可以识别 easy_install 已经完成的所有操作,甚至升级随它安装的软件包。

          如果您是开发人员,请留意 virtualenv 以控制不同的设置和模块版本的组合。其他答案已经提到了它,到目前为止没有提到的是Tox 模块,这是一个用于测试您的包在不同 Python 版本中正确安装的工具。

          虽然我通常没有版本冲突,但我喜欢使用 virtualenv 来设置一个干净的环境并清楚地了解我的包依赖项。这样我就永远不会忘记 setup.py 中的任何依赖项

          如果您选择 MacPorts,请注意不再选择同一个包的多个版本,就像旧的 Debian 风格带有一个额外的 python_select 包(它仍然存在以保持兼容性)。现在您可以使用 select 命令来选择要使用的 Python 版本(您甚至可以选择 Apple 安装的版本):

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

          在上面添加 tox,你的程序应该是真正可移植的

          【讨论】:

            【解决方案12】:

            直接安装 fink 包之一(Django 1.6 截至 2013-11 月)

            fink install django-py27
            fink install django-py33
            

            或者自己创建一个 virtualenv:

            fink install virtualenv-py27
            virtualenv django-env
            source django-env/bin/activate
            pip install django
            deactivate # when you are done
            

            或者在 virtualenv 中使用 fink django 以及任何其他 pip 安装包

            fink install django-py27
            fink install virtualenv-py27
            virtualenv django-env --system-site-packages
            source django-env/bin/activate
            # django already installed
            pip install django-analytical # or anything else you might want
            deactivate # back to your normally scheduled programming
            

            【讨论】:

              【解决方案13】:

              您可能已经预装了pip3,所以试试吧!

              【讨论】:

                猜你喜欢
                • 2015-12-22
                • 1970-01-01
                • 2013-11-05
                • 1970-01-01
                • 1970-01-01
                • 2018-08-13
                • 1970-01-01
                • 2020-07-06
                • 1970-01-01
                相关资源
                最近更新 更多