对于OSX Mountain Lion上真实的,太多的Python安装

时间:2013-03-12 17:55:57

标签: python mercurial osx-mountain-lion macports easy-install

我有三种不同的Python 2.7:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7

我使用了许多来自不同来源的软件包。我目前正在从端口(MacPorts), easy_install pip (由 easy_install 安装)和Mercurial安装软件包。还有一些我必须从图像安装或从源代码构建。我对这些有更多的控制权。

问题是easy_install和pip似乎安装到一个位置(/Library/Frameworks/...),而MacPorts安装到另一个位置(/opt/local/Library/Frameworks/...)。

现在我最好的行动是什么?删除/Library/Frameworks/.../python2.7并将easy_install和pip移至/opt/local/...处的MacPorts一个?链接这两个目录?将MacPorts安装移至/Library/Frameworks/...

我如何巩固这些蟒蛇?我已经尝试将两个站点包位置放在我的路径中,但只有某些包只适用于一个Python而不是另一个,反之亦然,我需要它们一次全部可用。

4 个答案:

答案 0 :(得分:4)

您似乎可以控制自己正在构建的东西。这就是我用pip整合macport的方法:

我喜欢使用 Macports 来处理我的所有内容,所以我只需要确保pipeasy_install构建到macports的python安装中({{1} }})。

您可以使用以下命令告知pip和easy_install将在何处安装:

/opt/local/...

(这些是反叛)

如果要将pip安装到macports目录,请使用macports安装pip:

readlink `which pip`

然后,确保sudo port install py-pip 指向类似的内容:

which pip

从下面的评论中(感谢@Jonathan和@Ned),您可以对askewchan@rock:~$ which pip /opt/local/bin/pip askewchan@rock:~$ readlink `which pip` /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip-2.7 执行相同操作,但其端口名为easy_install

py-distribute

但据我所知,您永远不需要使用sudo port install py-distribute ,因为anything that can be easy_installed can be piped better

请注意端口说明:

easy_install

答案 1 :(得分:1)

我建议您为开发工作决定一个且只有一个Python(个人而言,我使用Python.org发布)

  • 你无法摆脱/ Library / Frameworks - 这是默认的OSX,你可能会破坏事情
  • 剩下的两个Pythons中的
  • ,我假设一个是Macports而另一个是Python.org - 你需要选择你想成为你的开发环境并坚持下去。

强烈建议不要使用一个Python中的pipeasy_install来为另一个Python安装模块。原因是编译选项可能存在差异。在OSX上正确编译某些软件包可能很难 - 如果你开始针对不同的二进制文件进行编译(可能支持不同的体系结构),那么你只会增加头痛。

我个人选择了以下路径:

  1. 我使用Python.org包进行所有开发。
  2. 在终端登录时,我运行shell脚本来优先考虑我的Python选择
  3. 我的所有项目都有自己的virtualenv,我禁用系统包
  4. 当开始处理任何项目时,我倾向于拥有一个环境设置脚本。我输入go_myproject.source; cd我到了正确的目录并运行source /path/to/virtualenv/bin/activate让我为该项目设置。
  5. 在安装设备时会有一点点开销,但从那时起我就一直处于完全的天堂。管理项目而不需要担心因为杀死其他东西而导致的依赖/升级是......幸福。

答案 2 :(得分:1)

虽然不是一般解决方案,但我使用virtualenv安装Mercurial和其他基于Python的应用程序。特别是,pip和easy_install将仅安装到相应的虚拟环境,而不会使任何系统文件夹混乱。当然,缺点是我会复制一些软件包;我的优势在于我拥有一个干净,自包含的环境,其中包含已知版本的Python(对于像Mercurial和其他关键任务应用程序这样的东西对我来说更重要)。

另一个缺点是我需要将各个应用程序链接到我的个人bin目录,或者将虚拟环境的bin目录添加到我的路径中。 (就个人而言,我通过一些简单的脚本来管理它,为我做符号链接。)

答案 3 :(得分:-2)

我很想将所有python安装移动到一个地方并创建符号链接。 之后配置python环境以避免导入问题和模块的“可见性”。 尝试使用命令:

# easy_install
env PYTHONPATH=/custom/path easy_install –install-dir /custom/path

#pip
pip install --install-option="--prefix=$PREFIX_PATH" package_name