在 Mac 上安装 python 模块最兼容的方法是什么?
- 2025-04-16 08:57:00
- admin 原创
- 50
问题描述:
我开始学习 Python,并且非常喜欢它。我主要在 Mac 上工作,也使用 Linux。我发现在 Linux 上(主要是 Ubuntu 9.04)使用 apt-get 安装 Python 模块时,它运行良好。我可以毫无问题地导入它。
在 Mac 上,我习惯使用 Macports 安装所有 Unix 相关的组件。然而,我发现我用它安装的大多数 Python 模块在 Python 中都无法识别。我花了一些时间尝试 PATH 设置和使用 python_select 。但都没有任何效果,目前我还没有真正理解其中的原理,只是在摸索。
我感觉 Macports 在管理 Python 模块方面并不是很受欢迎。我想尝试一种更“被接受”(如果这个词用得恰当的话)的方法。
所以,我想知道,Mac Python 开发人员使用什么方法来管理他们的模块?
附加问题:
你用的是苹果的 Python 还是其他版本?所有东西都是从源代码编译的吗?或者有没有好用的包管理器(比如 Fink?)。
解决方案 1:
管理 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。
解决方案 2:
您的问题已经是三年前的了,并且其他答案中没有涉及一些细节:
我认识的大多数人都使用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 安装--用户 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 版本下正确安装的工具。
虽然我通常不会遇到版本冲突,但我还是喜欢用虚拟环境来设置一个干净的环境,清晰地查看我的软件包依赖关系。这样,我就不会忘记 setup.py 中的任何依赖项。
如果您选择 MacPorts,请注意,它不再像旧版 Debian 那样使用额外的 python_select 包来选择同一软件包的多个版本(它仍然保留,以保证兼容性)。现在,您可以使用 select 命令来选择要使用的 Python 版本(您甚至可以选择 Apple 已安装的版本):
$ port select python
Available versions for python:
none
python25-apple
python26-apple
python27 (active)
python27-apple
python32
$ port select python python32
在其上添加毒药,你的程序应该真正具有可移植性
解决方案 3:
请参阅Python OS X 开发环境。最好的方法是使用MacPorts。下载并安装 MacPorts ,然后在终端中输入以下命令通过 MacPorts 安装 Python :
sudo port 安装 python26 python_select
sudo 端口选择——设置 python python26
或者
sudo port 安装 python30 python_select
sudo 端口选择——设置 python python30
使用第一组命令安装 Python 2.6,第二组命令安装 Python 3.0。然后使用:
sudo port install py26-packagename
或者
sudo port install py30-packagename
在上面的命令中,将packagename替换为包的名称,例如:
sudo port 安装 py26-setuptools
这些命令将自动安装给定 Python 版本的包(及其依赖项)。
要获取 Python 可用包的完整列表,请输入:
端口列表 | grep py26-
或者
端口列表 | grep py30-
您使用哪个命令取决于您选择安装哪个版本的 Python。
解决方案 4:
我使用 MacPorts 将 Python 及其追踪的任何第三方模块安装到/opt/local
,并将所有手动安装的模块(不在 MacPorts 存储库中的模块)安装到/usr/local
,这从未造成任何问题。我想您可能对某些 MacPorts 脚本和环境变量的使用感到困惑。
MacPortspython_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
.
解决方案 5:
使用 MacPorts Python 安装没有任何问题。如果您从 MacPorts 安装 Python 模块,但却看不到它们,则很可能意味着您没有调用安装到 MacPorts 的 Python。在终端 shell 中,您可以使用绝对路径来调用可能已安装的各种 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
命令,所以请确保您调用了正确的命令easy_install
。
解决方案 6:
如果您使用 MacPorts 的 Python,它有自己的 easy_install,位于:/opt/local/bin/easy_install-2.6(适用于 py26)。它与直接调用 easy_install 不同,即使您使用 python_select 更改了默认的 Python 命令。
解决方案 7:
你研究过easy_install吗?它不会同步你的 macports 之类的东西,但会自动下载最新的软件包和所有必要的依赖项,也就是说
easy_install nose
对于 nose 单元测试包,或者
easy_install trac
用于trac
错误跟踪器。
他们的EasyInstall页面上还有更多信息。
解决方案 8:
对于 MacPython 安装,我在这篇博文中找到了使用 setuptools(easy_install)解决问题的有效解决方案:
http://droidism.com/getting-running-with-django-and-macpython-26-on-leopard
一个方便的技巧包括找出终端中活动的 Python 版本:
which python
解决方案 9:
使用 MacPorts 安装模块时,它不会进入 Apple 版本的 Python,而是安装到所选的 MacPorts 版本的 Python 中。
您可以使用名为python_select的 mac 端口更改默认使用的 Python 版本。说明在这里。
另外,还有easy_install。它将使用 python 安装 python 模块。
解决方案 10:
您可能已经pip3
预先安装,所以只需尝试一下!
解决方案 11:
关于使用哪个版本的 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-/
解决方案 12:
我将easy_install与 Apple 的 Python 一起使用,效果非常好。
解决方案 13:
直接安装其中一个 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
或者在虚拟环境中使用 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
扫码咨询,免费领取项目管理大礼包!