如何将我的基于Homebrew的Python配置替换为Conda

时间:2019-04-03 19:33:55

标签: python homebrew conda miniconda

我目前拥有a rather complex Python configuration,这些年来已经发展了,我想对其进行清理和“现代化”。

现有配置具有默认的macOS Python,而Homebrew的Python 3和Python 2并排存在,以及它们相关的Pips。我也有一些Python命令行工具,这些Python或其相关的已安装软件包已创建,并且它们或多或少地经常使用。

我想做的是:

  • 保持macOS Python不变
  • 消除所有自制的Python
  • 完全删除非macOS Python 2
  • 切换为Conda Python作为我的Python 3
  • 使用mkvirtualenv可以访问virtualenvwrapper(作为创建环境的替代方法)
  • 可以访问Jupyter

我不确定如何在不产生问题的情况下执行此操作,并想确认明显的事情是安全的事情:

  1. 使用Homebrew卸载其Python,
  2. 安装Conada,然后
  3. 使用(Conda的)pip安装mkvirtualenvvirtualenvwrapper和Jupyter(以及我随后需要的任何其他工具)

这是正确的程序吗?我应该使用某些特定形式的命令或为它们选择的选项吗?

2 个答案:

答案 0 :(得分:1)

首先,安装anaconda或miniconda。该安装是非破坏性的,不会与您的其他Python安装冲突。在考虑删除自制软件安装的Python之前,请先检查其是否有效。

conda命令既用作程序包管理器,又用作环境管理器。您无法避免创建conda环境:默认安装已经是名为base的环境的一部分。我也不确定为什么要这么做。

您可以使用pip将您选择的任何软件包安装到conda环境中,但是由于您可以将conda install用于任何conda通道上可用的任何软件包(例如'defaults','conda-forge '),通常使用pip是多余的。

您可以使用非conda虚拟环境,但是又一次:为什么?先启动conda create -n foo python=x.x jupyter #etc,然后再运行conda activate foo

答案 1 :(得分:0)

最大和/或第一个问题是如何不破坏依赖Python的现有功能。这里有两个大阵营:

1)硬编码Python可执行文件位置的工具和其他脚本,并且

2)依赖于/ a系统PATH变量的工具和其他脚本。

#1是比较容易的一种。如果您不打算删除任何Python版本,那么这些根本不起作用...这些将继续工作。如果确实要卸载某些Python版本,则必须进行工作以将依赖于要删除的那些版本的所有工具切换到也适用于该工具的另一个版本。有问题的路径通常在每个主要Python二进制文件顶部的shebang('#!xxx')行中,但是还有其他方法可以形成Python二进制文件的路径。简而言之,为什么要卸载任何内容?磁盘空间很便宜。也许相反,只是确保这些不需要的版本没有被任何PATH变量引用。

#2很难。当您在主要帐户的命令提示符处键入“ python”时,不一定需要该类别中的所有工具都使用您获得的Python版本。可以有其他操作模式以不同的方式初始化执行环境(PATH变量),因此尽管依赖于PATH的值,但是可能运行不同的Python版本。

#2的一部分不仅担心“ python”引用,还担心“ python2”,“ python3”以及其他可能的变体。

仅当您制定了解决上述问题的计划,以便不中断工作时,您才可能担心摆脱Python版本并安装新版本。希望Brew能够很好地卸载已安装的版本,因此,如果您可以删除对其中一个或多个的依赖,则可以轻松删除它们。如果您具有自行安装的Python版本,则只需通过删除PATH变量中对它们的引用即可轻松卸载这些版本(否则,如果您错过了某些版本,这应该不是一个大问题),然后删除安装目录。

然后添加新版本的Python。这只会影响上面的#2。您必须考虑这一点,并知道如果新安装操作任何PATH变量会对您产生什么影响。如果它仅操纵您自己用户的PATH,或者让它留给您这样做,那么这是一件容易理解的任务,但是对环境的任何更改都可能破坏现有功能。

最后,有一些机制可以为新开发选择不同的Python版本,包括使用虚拟环境。这可能是最简单的部分,因为您可以进行研究,尝试并测试您可以做任何想做的事情。这部分问题是最好的。

除了模糊地知道它是什么以外,我对Jupyter一无所知,所以我不知道这使这一切复杂化了。

更新:最后的笔记。您可能已经知道,Python在每个版本保持其唯一身份方面都很好地隔离了自己。如果使用正确的“ pip”和“ easy_install”,它们正要与要运行的“ python”二进制文件相邻,那么您应该干净地影响那个环境。我不知道所有Python版本都这么简单,但是我从来没有见过我所使用的Python版本违反了这一约定。当然,这里的复杂性涉及通过PATH变量找到它们时,在各种情况下会获得这些工具的哪个版本。