我开始学习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?)。
答案 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)
你的问题已经有三年了,其他答案中没有涉及一些细节:
我认识的大多数人使用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 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