我刚买了一台带有OSX Sierra的Macbook,所以想确保我的开发环境设置正确。
我希望遵循最佳做法'这里提到:https://github.com/nicolashery/mac-dev-setup
我需要Python 2.x用于工作(urllib,Pandas,Numpy,Scikit-learn),以及Python 3.x用于一些在线课程(Pandas,Numpy,Django)。
我已经分别使用brew install python
和brew install python3
安装了Python 2和3。
然而,在这个链接上,没有提到Anaconda,只有IPython。 鉴于我已经通过Homebrew安装了Python 2和3,是否建议使用anaconda,或者我应该坚持上面Github链接中提到的标准IPython? 阅读这篇文章后我很困惑:OS X - Deciding between anaconda and homebrew Python environments
如果Brew和Anaconda确实可以合作,我可以采取哪些具体步骤来确保两个版本之间没有冲突?
答案 0 :(得分:6)
brew
和conda
往往不能很好地玩在一起,但是到目前为止,我认为我的设置对我来说效果很好。它的灵感来自this post。
您可以将以下代码添加到.zshrc
:
# Deactivates conda before running brew.
# Re-activates conda if it was active upon completion.
brew() {
local conda_env="$CONDA_DEFAULT_ENV"
while [ "$CONDA_SHLVL" -gt 0 ]; do
conda deactivate
done
command brew $@
local brew_status=$?
[ -n "${conda_env:+x}" ] && conda activate "$conda_env"
return "$brew_status"
}
您想在运行conda
之前停用brew
,以使brew
每次尝试安装某些软件时都不会在conda
中找到PATH
软件包。实际上,如您在运行brew之前未停用brew doctor
一样,conda
会抱怨,如我上面链接到的帖子所述。 (另请参见this question。)
我应该提到的一件事是conda
环境是“堆栈”,但是我上面编写的brew()
函数不能跟踪您的环境堆栈。 (有关此功能的版本,请参见下文,以了解此功能。)例如,如果在conda activate newenv
环境conda
处于活动状态时执行oldenv
,则conda deactivate
将返回到oldenv
。但是,如果在激活brew
之后再使用oldenv
之后,使用上面编写的功能运行newenv
,则运行conda deactivate
不会使您回到oldenv
,但是会完全停用您的conda环境。
此功能还可能在运行brew
时产生一些不必要的开销,因为我相信您实际上只需要在运行conda
时停用brew install
环境。就是说,如果您是那种足够在意这笔开销的人,那么这个答案可能不会告诉您您不知道的任何事情。
最后一点,brew cask install anaconda
并不是一个好主意,因为conda
被设计为安装在$HOME
中,但是brew cask
将要安装/usr/local
中使用它,这样可能导致不可预测的行为。
编辑:这是brew
函数的一个版本,该函数可以让您的conda环境如实地找到:
brew() {
local -a conda_envs
while [ "$CONDA_SHLVL" -gt 0 ]; do
conda_envs=("$CONDA_DEFAULT_ENV" $conda_envs)
conda deactivate
done
command brew $@
local brew_status=$?
for env in $conda_envs; do
conda activate "$env"
done
unset env
return "$brew_status"
}
我已经在Zsh中对此进行了测试。我认为它不会在Bash中运行。如果要在Bash中使用它,则需要更改for循环声明,使其类似于for env in ${conda_envs[@]}
。但是,我尚未对此进行测试,因此请在使用前测试它是否满足您的要求。
答案 1 :(得分:3)
我是python的新手,我的python安装遇到了麻烦。我在我的mac上安装了自制软件和anaconda的python。我的anaconda安装搞砸了我的自制python依赖vim和MacVim。
我的解决方案是每当我通过自制软件安装/更新软件包时,我会从我的PATH中删除anaconda。这有点痛苦,但我只是偶尔通过自制软件安装/更新软件包,所以没关系。
要在python 2和3之间切换,这是我在终端中的命令:
$ conda search python
...
...
$ conda install python=3.5.0
$ conda info -e
# conda environments:
#
py27 /Users/apollotang/opt/local/anaconda2/envs/py27
py36 /Users/apollotang/opt/local/anaconda2/envs/py36
root * /Users/apollotang/opt/local/anaconda2
$ source activate py36 ### <——— here is the command in to change python version
(py36) $ conda info -e
# conda environments:
#
py27 /Users/apollotang/opt/local/anaconda2/envs/py27
py36 * /Users/apollotang/opt/local/anaconda2/envs/py36
root /Users/apollotang/opt/local/anaconda2
(py36) $ python -V
Python 3.6.2 :: Anaconda custom (x86_64)
我发现了这个命令 How to change default Anaconda python environment 和 http://chris35wills.github.io/conda_python_version/
另外,这里有一篇关于在mac上设置python环境的最佳实践的非常好的文章 https://www.davidculley.com/installing-python-on-a-mac/
答案 2 :(得分:1)
安装anaconda
意味着您不需要系统Python(将其留在系统中,因为您可能不想更改它)或homebrew
安装的Python。< / p>
创建conda
环境时,可以指定要使用的Python版本。例如:
$ conda create --name myenv python=3.5
激活conda
环境(在上述命令之后,您将使用conda activate myenv
进行操作,或者对于早期版本使用source activate myenv
进行操作)自动意味着python
命令将运行您为该环境选择的Python解释器。软件包可以与pip
以及conda install
一起安装,并且与conda
环境非常兼容。
答案 3 :(得分:1)
这是一篇有关自制和水蟒重叠以及处理方式的有趣文章。 setting up python environment with anaconda and homebrew
答案 4 :(得分:0)
您可以设置虚拟环境(virtualenv)并为每个版本分配不同版本的Python,这样就不会有任何重叠导致依赖性问题。
查看“The Hitchhiker's Python指南”,了解如何进行设置。