什么是在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模块的目录。 在我的情况下,我的$PYTHONPATH
variables包含/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