什么是在Mac上安装python模块最兼容的方式?

我开始学习Python并且喜欢它。 我主要和Linux一样在Mac上工作。 我发现在Linux(大多是Ubuntu 9.04),当我安装一个使用apt-get的python模块,它工作正常。 我可以毫不费力地导入它。

在Mac上,我习惯于使用Macports来安装所有Unixy的东西。 但是,我发现我安装的大部分python模块都没有被python看到。 我花了一些时间玩PATH设置和使用python_select。 没有什么真正的工作,在这一点上,我不是很了解,而是我只是在旁边。

我觉得Macports并不是普遍喜欢pipe理Python模块。 我想开始使用更“接受”(如果这是正确的话)方法新鲜。

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

奖金问题:

你使用苹果的Python或其他版本? 你从源代码编译所有的东西还是有一个包装经理,运作良好(芬克?)。

pipe理python软件包的最stream行的方法是使用setuptools和easy_install。 它可能已经安装在你的系统上。 像这样使用它:

easy_install django 

easy_install使用Python Package Index ,这对Python开发者来说是一个惊人的资源。 看看有什么软件包可用。

一个更好的select是点 ,这是获得牵引力,因为它试图解决很多与easy_install相关的问题 。 Pip使用与easy_install相同的软件包存储库,它只是更好。 真正唯一需要使用easy_install的时候是这个命令:

 easy_install pip 

之后,使用:

 pip install django 

在某些时候,你可能想学习一些关于virtualenv的知识 。 如果你在有相互矛盾的包需求的项目上进行大量的python开发,virtualenv是一个天赐之物。 它可以让你有完全不同的版本的各种包,并根据您的需要轻松地切换它们。

关于使用哪个python,坚持使用苹果的python会给你带来最less的麻烦,但是如果你需要更新的版本(Leopard是2.5.1,我相信),我会去macports python 2.6。

你的问题已经三年了,其他答案中没有提到一些细节:

大多数我认识的人使用HomeBrew或MacPorts ,我更喜欢MacPorts,因为它清楚了Mac OS X默认环境和我的开发设置。 只需移出/ opt文件夹,然后用普通的用户Python环境testing你的包

MacPorts只能在Mac中使用,但使用easy_install或pip,您将学习如何在任何平台(Win / Mac / Linux / Bsd …)中设置您的环境。 此外,它将始终是更新的,更多的包

我个人让MacPorts处理我的Python模块,以保持一切更新。 像任何其他高级包pipe理器(即:apt-get)一样,对于具有大量二进制依赖关系的模块来说,这样做更好。 我不会用easy_install或pip构build我的Qt绑定(PySide)。 Qt是巨大的,需要很多编译。 只要你需要一个需要非Python程序使用库的Python包,就尽量避免使用easy_install或pip

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

pip-2.7安装 – 用户elixir

(确保你总是inputpip-(版本))

这将在您的主目录中build立一个额外的Python库。 是的,Python可以处理多个库位置:一个由MacPorts控制,一个在MacPorts中缺less的所有位置。

现在请注意,我赞成通过easy_install点。 有一个很好的理由,你应该避免setuptools和easy_install。 这是一个很好的解释 ,我试图远离它们。 点子的一个非常有用的function是给你一个你用MacPorts,easy_install和pip本身安装的所有模块(沿着它们的版本)的列表:

点子2.7冻结

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

如果您是开发人员,请关注virtualenv以控制不同的设置和模块版本的组合。 其他答案已经提到它,到目前为止没有提到的是Tox模块,这是一个testing你的软件包是否正确安装了不同的Python版本的工具。

尽pipe我通常没有版本冲突,但我喜欢使用virtualenv来设置一个干净的环境,并清楚地看到我的软件包依赖关系。 这样,我永远不会忘记我的setup.py中的任何依赖关系

如果你使用MacPorts,请注意,同样的软件包的多个版本不再像旧版Debian风格那样select一个额外的python_select软件包(为了兼容性,它仍然存在)。 现在,您可以使用select命令来select使用哪个Python版本(甚至可以selectApple安装的版本):

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

在它的顶部添加毒素,你的程序应该是真正的便携式

请参阅Python OS X开发环境 。 最好的方法是使用MacPorts 。 下载并安装MacPorts,然后通过在terminal中input以下命令,通过MacPorts安装Python:

 sudo port安装python26 python_select
 sudo port select --set python26

要么

 sudo port安装python30 python_select
 sudo port select --set python30

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

 sudo port安装py26-packagename

要么

 sudo port安装py30-packagename

在上面的命令中,将packagenamereplace为该包的名称,例如:

 sudo port安装py26-setuptools

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

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

端口列表|  grep py26-

要么

端口列表|  grep py30-

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

我使用MacPorts将MacPorts跟踪的任何第三方模块安装到/opt/local ,并且将任何手动安装的模块(不在MacPorts存储库中)安装到/usr/local ,这从来没有造成任何问题。 我想你可能会对使用某些MacPorts脚本和环境variables感到困惑。

MacPorts的python_select被用来selectPython的“当前”版本,但它与模块无关。 这使您可以(例如)使用MacPorts安装Python 2.5和Python 2.6,并在安装之间切换。

$PATH环境variables不影响Python模块的加载。 $PYTHONPATH是你在找什么。 $PYTHONPATH应指向包含要加载的Python模块的目录。 在我的情况下,我的$PYTHONPATHvariables包含/usr/local/lib/python26/site-packages 。 如果你使用MacPorts的Python,它会为你设置其他适当的目录,所以你只需要添加额外的path到$PYTHONPATH 。 但是,当Pythonsearch你已经安装的模块时, $PATH也不会被使用。

$PATH用来查找可执行文件,所以如果你安装MacPorts的Python,确保/opt/local/bin在你的$PATH

使用MacPorts Python安装没有任何问题。 如果你从MacPorts安装python模块,但没有看到它们,这可能意味着你没有调用你安装的MacPorts python。 在terminalshell中,可以使用绝对path来调用可能安装的各种Pythons。 例如:

 $ /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设置正确,以确保首先find正确的可执行文件。 另一个解决scheme是定义shell的别名到各种python。

python.org(MacPython)的安装也不错,正如其他人所build议的那样。 easy_install可以帮助,但同样,因为每个Python实例可能有自己的easy_install命令,请确保您正在调用正确的easy_install

如果你从MacPorts使用Python,它自己的easy_install位于: /opt/local/bin/easy_install-2.6 (对于py26,就是这样)。 它不是简单地直接调用easy_install,即使您使用python_select更改您的默认python命令。

你有没有看过easy_install ? 它不会同步你的macports或类似的东西,但它会自动下载最新的软件包和所有必要的依赖关系,即

 easy_install nose 

为鼻子单位testing包裹,或

 easy_install trac 

trac错误跟踪器。

EasyInstall页面上还有更多的信息。

对于MacPython安装,我find了一个有效的解决scheme来解决setuptools(easy_install)这个博客文章中的问题:

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

一个方便的提示包括找出哪个版本的python在terminal中处于活动状态:

 which python 

使用MacPorts安装模块时,它不会进入Apple的Python版本。 相反,这些模块安装在所select的MacPorts版本的Python上。

您可以使用名为python_select的mac端口来更改默认使用的Python版本。 说明在这里 。

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

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

我使用easy_install与苹果的Python,它就像一个魅力。

直接安装一个fink软件包(截至2013年11月的Django 1.6)

 fink install django-py27 fink install django-py33 

或者创造一个虚拟世界:

 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