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

时间:2009-07-31 16:58:56

标签: python macos module packages macports

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

在Mac上,我习惯使用Macports安装所有Unixy的东西。但是,我发现我安装的大多数python模块都没有被python看到。我花了一些时间玩PATH设置并使用python_select。没有什么真的有效,而且在这一点上我并没有真正理解,相反,我只是在四处寻找。

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

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

奖金问题:

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

13 个答案:

答案 0 :(得分:143)

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

easy_install django

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

一个更好的选择是pip,它正在尝试与easy_install相关联的fix a lot of the problems。 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 :(得分:42)

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

我认识的大多数人使用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-(版本))

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

现在请注意,我赞成pip over 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,请注意不再选择相同软件包的多个版本,例如带有额外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 :(得分:30)

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

sudo port install python26 python_select
sudo port select --set python python26

OR

sudo port install python30 python_select
sudo port select --set python python30

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

sudo port install py26-packagename

OR

sudo port install py30-packagename

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

sudo port install py26-setuptools

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

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

port list | grep py26-

OR

port list | grep py30-

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

答案 3 :(得分:7)

我使用MacPorts将Mac和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添加其他路径。但同样,当Python搜索您已安装的模块时,根本不会使用$PATH

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

答案 4 :(得分:6)

使用MacPorts Python安装没有任何问题。如果你从MacPorts安装python模块但是没有看到它们,那可能意味着你没有调用你安装的MacPorts python。在终端shell中,您可以使用绝对路径来调用可能安装的各种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以确保首先找到正确的可执行文件。另一个解决方案是为各种蟒蛇定义shell别名。

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

答案 5 :(得分:6)

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

答案 6 :(得分:4)

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

easy_install nose

用于鼻子单元测试包,或

easy_install trac

用于trac错误跟踪器。

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

答案 7 :(得分:3)

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

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

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

which python

答案 8 :(得分:2)

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

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

此外,还有easy_install。哪个将使用python来安装python模块。

答案 9 :(得分:1)

关于使用哪个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-/

找到确切的命令

答案 10 :(得分:1)

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

答案 11 :(得分:-1)

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

答案 12 :(得分:-1)

直接安装其中一个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