在Mac上安装Python模块最兼容的方法是什么?
我刚开始学习Python,觉得非常有趣。我主要在Mac上工作,也会用Linux。发现我在Linux(主要是Ubuntu 9.04)上用apt-get安装Python模块时,一切都很顺利,可以毫无问题地导入这些模块。
在Mac上,我习惯用Macports来安装所有Unix相关的东西。不过,我发现用它安装的大多数Python模块,Python却无法识别。我花了一些时间调整PATH设置和使用python_select,但都没有什么效果,现在我有点迷茫,只是在随便试试。
我感觉Macports在管理Python模块方面并不是大家都喜欢的选择。我想重新开始,使用一种更“被接受”的方法(如果这个词合适的话)。
所以,我想知道,Mac上的Python开发者通常用什么方法来管理他们的模块呢?
附加问题:
你是使用苹果自带的Python,还是其他版本? 你是从源代码编译所有东西,还是有一个好用的包管理器(比如Fink)?
13 个回答
请查看 Python OS X 开发环境。最好的方法是使用 MacPorts。你需要下载并安装 MacPorts,然后在终端中输入以下命令来通过 MacPorts 安装 Python:
sudo port install python26 python_select sudo port select --set python python26
或者
sudo port install python30 python_select sudo port select --set python python30
使用第一组命令来安装 Python 2.6,第二组命令来安装 Python 3.0。然后使用:
sudo port install py26-packagename
或者
sudo port install py30-packagename
在上面的命令中,把 packagename 替换成你想要安装的包的名字,比如:
sudo port install py26-setuptools
这些命令会自动为你选择的 Python 版本安装这个包(以及它需要的其他依赖包)。
要查看所有可用的 Python 包的完整列表,可以输入:
port list | grep py26-
或者
port list | grep py30-
你使用哪个命令取决于你选择安装的 Python 版本。
你的问题已经有三年了,之前的回答中有些细节没有提到:
我认识的大多数人都在使用HomeBrew或MacPorts,我个人更喜欢MacPorts,因为它能很好地区分默认的Mac OS X环境和我的开发环境。你只需要把/opt文件夹移走,然后用普通用户的Python环境来测试你的包。
MacPorts只能在Mac上使用,但通过easy_install或pip,你可以学会如何在任何平台上(Windows/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-(版本))
这会在你的主目录下构建一个额外的Python库。是的,Python可以使用多个库位置:一个由MacPorts管理,另一个是用户本地的,用于MacPorts中缺失的所有内容。
现在注意,我更喜欢pip而不是easy_install。你应该避免使用setuptools和easy_install,这里有一个很好的解释,我尽量远离它们。pip的一个非常有用的功能是可以列出你用MacPorts、easy_install和pip自己安装的所有模块(以及它们的版本):
pip-2.7 freeze
如果你已经开始使用easy_install,不用担心,pip可以识别easy_install已经做的所有事情,甚至可以升级用它安装的包。
如果你是开发者,可以关注一下virtualenv,它可以帮助你控制不同的设置和模块版本组合。其他回答已经提到过它,但到目前为止没有提到的是Tox模块,这是一个测试工具,可以确保你的包在不同的Python版本中正确安装。
虽然我通常没有版本冲突,但我喜欢使用virtualenv来设置一个干净的环境,这样可以清楚地看到我的包依赖关系。这样我就不会在setup.py中忘记任何依赖。
如果你选择使用MacPorts,请注意,多个相同包的版本不再像以前的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,你的程序应该会非常便携。
管理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。如果你在处理多个项目时,遇到包之间的版本冲突,virtualenv会非常有帮助。它可以让你拥有不同版本的各种包,并且可以根据需要轻松切换。
关于使用哪个Python版本,使用苹果自带的Python会让你遇到的麻烦最少。不过,如果你需要更新的版本(我记得Leopard是2.5.1),那么可以选择macports的Python 2.6。