问题:在Mac上安装python模块的最兼容方法是什么?
我开始学习python并热爱它。我主要在Mac和Linux上工作。我发现在Linux(主要是Ubuntu 9.04)上,使用apt-get安装python模块时,它工作正常。我可以轻松导入它。
在Mac上,我习惯于使用Macports安装所有Unixy东西。但是,我发现我安装的大多数python模块都没有被python看到。我花了一些时间玩弄PATH设置并使用python_select。什么都没有真正起作用,在这一点上我还不是很了解,相反,我只是闲逛。
我得到的印象是Macports在管理python模块方面并不广受喜爱。我想使用更“接受”(如果正确的话)的方法重新开始。
因此,我想知道Mac python开发人员使用什么方法来管理其模块?
奖励问题:
您使用Apple的python还是其他版本?您是从源代码编译所有内容,还是有运行良好的软件包管理器(Fink?)。
回答 0
管理python软件包的最流行方法(如果您不使用系统软件包管理器)是使用setuptools和easy_install。它可能已经安装在您的系统上。像这样使用它:
easy_install django
easy_install使用Python软件包索引 ,这对于python开发人员来说是一个了不起的资源。环顾四周,看看有哪些软件包可用。
更好的选择是pip,它越来越受欢迎,因为它试图解决与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。
回答 1
您的问题已经三岁了,有些其他答案未涵盖的细节:
我认识的大多数人都使用HomeBrew或MacPorts,因此我更喜欢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安装–user elixir
(确保您总是输入pip-(version))
这将在您的主目录中构建一个额外的Python库。是的,Python将在一个以上的库位置中工作:一个库由MacPorts控制,而一个用户本地库则用于MacPorts中缺少的所有内容。
现在注意,我更喜欢pip而不是easy_install。有充分的理由应该避免使用setuptools和easy_install。这是一个很好的解释,我尝试远离它们。pip的一项非常有用的功能是为您提供与MacPorts,easy_install和pip本身一起安装的所有模块(及其版本)的列表:
pip-2.7冻结
如果您已经开始使用easy_install,请放心,pip可以识别easy_install已经完成的所有操作,甚至可以升级随其安装的软件包。
如果您是开发人员,请密切注意virtualenv,以控制不同的设置和模块版本的组合。其他答案已经提到了它,到目前为止没有提到的是Tox模块,该工具用于测试您的软件包是否可以在不同的Python版本中正确安装。
尽管我通常没有版本冲突,但我还是喜欢virtualenv来设置一个干净的环境并清晰地查看我的软件包依赖项。这样,我就永远不会忘记setup.py中的任何依赖项
如果您选择MacPorts,请注意,不再选择同一软件包的多个版本,例如带有额外python_select软件包的旧Debian风格(出于兼容性,它仍然存在)。现在,您可以使用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,您的程序应该真正可移植
回答 2
请参阅Python OS X开发环境。最好的方法是使用MacPorts。下载并安装MacPorts,然后通过在终端中键入以下命令来通过MacPorts安装Python:
须藤端口安装python26 python_select sudo端口选择--set python python26
要么
须藤端口安装python30 python_select sudo端口选择--set python python30
使用第一组命令安装Python 2.6,使用第二组命令安装Python 3.0。然后使用:
sudo端口安装py26-packagename
要么
sudo端口安装py30-packagename
在上述命令中,将packagename替换为软件包的名称,例如:
sudo端口安装py26-setuptools
这些命令将自动为给定的Python版本安装软件包(及其依赖项)。
有关Python可用软件包的完整列表,请键入:
端口列表| grep py26-
要么
端口列表| grep py30-
您使用哪个命令取决于您选择安装的Python版本。
回答 3
我使用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,它将为您设置其他适当的目录,因此您只需向添加其他路径$PYTHONPATH
。但是同样,$PATH
当Python搜索您已安装的模块时,根本不使用它。
$PATH
被用于查找可执行文件,所以如果你安装的MacPorts’的Python,确保/opt/local/bin
在你的$PATH
。
回答 4
使用MacPorts Python安装没有任何问题。如果要从MacPorts安装python模块,但看不到它们,则可能意味着您不调用安装的MacPorts python。在终端外壳中,您可以使用绝对路径来调用可能安装的各种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
命令,因此请确保您调用的是right easy_install
。
回答 5
如果您从MacPorts使用Python,则它具有自己的easy_install,位于:/opt/local/bin/easy_install-2.6(对于py26而言)。这与简单地直接调用easy_install不同,即使您使用python_select更改了默认的python命令也是如此。
回答 6
您有没有研究过easy_install?它不会同步您的macports或类似的东西,但是会自动下载最新的软件包和所有必要的依赖项,即
easy_install nose
用于鼻子单元测试包,或
easy_install trac
对于trac
bug跟踪系统。
他们的EasyInstall页面上也有更多信息。
回答 7
对于MacPython安装,我在此博客文章中找到了一种用于解决setuptools(easy_install)问题的有效解决方案:
http://droidism.com/getting-running-with-django-and-macpython-26-on-leopard
一个方便的技巧包括找出终端中哪个版本的python是活动的:
which python
回答 8
使用MacPorts安装模块时,它不会进入Apple的Python版本。而是将这些模块安装到所选的MacPorts版本的Python中。
您可以使用名为python_select的mac端口更改默认使用的Python版本。这里的说明。
另外,还有easy_install。它将使用python安装python模块。
回答 9
您可能已经pip3
预先安装了,请尝试一下!
回答 10
关于使用哪个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-/
回答 11
我将easy_install与Apple的Python配合使用,它的工作原理很吸引人。
回答 12
直接安装其中一个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