作为开发人员,通常是离不开Python环境的(即便你是Java-er、Js-er、Php-er .etc.)。

为何要保留Python2

Mac大多自带了python 2的环境,但是Python2在2020年1月1号已经EOF了。所以现在主流是python 3,但是我们又不能马上卸载python 2,因为还有很多软件包是基于python 2的(这点很无奈,只能等Apple完全移除Python2依赖)。于是,我们就要在保留python 2的情况下再安装一套python 3环境。

Python3发行版选择

通常我们讲的Python是指官方的CPython版本,这个版本提供了最基础、最通用的功能实现。但是这个版本默认缺少很多高级特性,例如虚拟环境、JIT、数学计算相关软件包等,需要使用者在安装后自行设置或安装。这就很耗费时间了,因此我选择了Anaconda Python的版本。

更多发行版对比可以参考 关于各Python发行版,我们需要了解的一切

安装Anaconda

Homebrew在cask中已经集成了Anaconda

$ brew search anaconda
==> Casks
anaconda ✔ $ brew cask info anaconda
anaconda: 2019.10 (auto_updates)
https://www.anaconda.com/
/usr/local/Caskroom/anaconda/2019.10 (424.2MB)
From: https://mirrors.ustc.edu.cn/homebrew-cask.git
==> Name
Continuum Analytics Anaconda
==> Artifacts
Anaconda3-2019.10-MacOSX-x86_64.sh (Installer)
==> Caveats
Cask anaconda installs files under /usr/local. The presence of such
files can cause warnings when running `brew doctor`, which is considered
to be a bug in Homebrew Cask.

因此我们只需要通过brew cask install anaconda就能很简单的完成安装。

环境切换

anaconda默认安装到了/usr/local/anaconda3,可以通过以下命令设置环境变量:

$ echo 'export PATH=/usr/local/anaconda3/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile

此时在终端执行python就会看到默认python环境已被切换到Anaconda:

$ python
Python 3.7.4 (default, Aug 13 2019, 15:17:50)
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

那么Python2环境去哪了呢?别慌,只是python命令链接到了Anaconda,原来的Python2环境丝毫不受影响,通过python2就能唤起:

$ python2

WARNING: Python 2.7 is not recommended.
This version is included in macOS for compatibility with legacy software.
Future versions of macOS will not include Python 2.7.
Instead, it is recommended that you transition to using 'python3' from within Terminal. Python 2.7.16 (default, Nov 9 2019, 05:55:08)
[GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.32.4) (-macos10.15-objc-s on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

如果你想把默认Python环境改回到Python2,只需执行以下命令:

$ echo 'alias python="/usr/bin/python"' >> ~/.bash_profile
$ source ~/.bash_profile

再次执行pyhton就会变回Python2环境了

$ python

WARNING: Python 2.7 is not recommended.
This version is included in macOS for compatibility with legacy software.
Future versions of macOS will not include Python 2.7.
Instead, it is recommended that you transition to using 'python3' from within Terminal. Python 2.7.16 (default, Nov 9 2019, 05:55:08)
[GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.32.4) (-macos10.15-objc-s on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

此时启动Anaconda就需要用python3命令了:

$ python3
Python 3.7.4 (default, Aug 13 2019, 15:17:50)
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

设置国内镜像源

和其他包管理器一样,Anaconda自带的conda以及pip也需要设置国内镜像。不久前中科大的镜像停止更新Anaconda源,截止我写这篇blog为止都未恢复,详见 Anaconda 源使用帮助。幸而清华大学的镜像已经恢复了更新,详见Anaconda 相关镜像已恢复

conda源设置

首先创建.condarc配置文件:

$ conda config --set show_channel_urls yes

然后参考Anaconda 镜像使用帮助修改.condarc文件即可。

pip源设置

和conda一样,这里使用清华大学的源,参考pypi 镜像使用帮助

$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
$ pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

Anaconda使用

以下说明均在默认python环境为anaconda的情况下。

# ~ [15:49:51]
$ python --version
Python 3.7.4 # ~ [15:49:55]
$ python
Python 3.7.4 (default, Aug 13 2019, 15:17:50)
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

虚拟环境

anaconda支持管理多个python虚拟环境。

创建虚拟环境

创建一个环境的方法很简单,例如创建python2.7的环境:

conda create --name python27 python=2.7

anaconda在准备好后,会请求在/usr/local/anaconda3/evns/python27中安装最新版的python 2.7.x :

$ conda create --name python27 python=2.7
Collecting package metadata (current_repodata.json): done
Solving environment: done ## Package Plan ## environment location: /usr/local/anaconda3/envs/python27 added / updated specs:
- python=2.7 The following packages will be downloaded: package | build
---------------------------|-----------------
ca-certificates-2019.11.27 | 0 131 KB defaults
certifi-2019.11.28 | py27_0 156 KB defaults
libcxx-4.0.1 | hcfea43d_1 947 KB defaults
libcxxabi-4.0.1 | hcfea43d_1 350 KB defaults
libedit-3.1.20181209 | hb402a30_0 136 KB defaults
libffi-3.2.1 | h475c297_4 37 KB defaults
ncurses-6.1 | h0a44026_1 732 KB defaults
pip-19.3.1 | py27_0 1.9 MB defaults
python-2.7.17 | h97142e2_0 9.3 MB defaults
readline-7.0 | h1de35cc_5 316 KB defaults
setuptools-44.0.0 | py27_0 513 KB defaults
sqlite-3.30.1 | ha441bb4_0 2.4 MB defaults
tk-8.6.8 | ha441bb4_0 2.8 MB defaults
wheel-0.33.6 | py27_0 40 KB defaults
zlib-1.2.11 | h1de35cc_3 90 KB defaults
------------------------------------------------------------
Total: 19.7 MB The following NEW packages will be INSTALLED: ca-certificates anaconda/pkgs/main/osx-64::ca-certificates-2019.11.27-0
certifi anaconda/pkgs/main/osx-64::certifi-2019.11.28-py27_0
libcxx anaconda/pkgs/main/osx-64::libcxx-4.0.1-hcfea43d_1
libcxxabi anaconda/pkgs/main/osx-64::libcxxabi-4.0.1-hcfea43d_1
libedit anaconda/pkgs/main/osx-64::libedit-3.1.20181209-hb402a30_0
libffi anaconda/pkgs/main/osx-64::libffi-3.2.1-h475c297_4
ncurses anaconda/pkgs/main/osx-64::ncurses-6.1-h0a44026_1
pip anaconda/pkgs/main/osx-64::pip-19.3.1-py27_0
python anaconda/pkgs/main/osx-64::python-2.7.17-h97142e2_0
readline anaconda/pkgs/main/osx-64::readline-7.0-h1de35cc_5
setuptools anaconda/pkgs/main/osx-64::setuptools-44.0.0-py27_0
sqlite anaconda/pkgs/main/osx-64::sqlite-3.30.1-ha441bb4_0
tk anaconda/pkgs/main/osx-64::tk-8.6.8-ha441bb4_0
wheel anaconda/pkgs/main/osx-64::wheel-0.33.6-py27_0
zlib anaconda/pkgs/main/osx-64::zlib-1.2.11-h1de35cc_3 Proceed ([y]/n)?

同意后会执行下载安装:

Downloading and Extracting Packages
libffi-3.2.1 | 37 KB | ################################################################################################################################################################### | 100%
pip-19.3.1 | 1.9 MB | ################################################################################################################################################################### | 100%
readline-7.0 | 316 KB | ################################################################################################################################################################### | 100%
ca-certificates-2019 | 131 KB | ################################################################################################################################################################### | 100%
sqlite-3.30.1 | 2.4 MB | ################################################################################################################################################################### | 100%
tk-8.6.8 | 2.8 MB | ################################################################################################################################################################### | 100%
certifi-2019.11.28 | 156 KB | ################################################################################################################################################################### | 100%
ncurses-6.1 | 732 KB | ################################################################################################################################################################### | 100%
libedit-3.1.20181209 | 136 KB | ################################################################################################################################################################### | 100%
libcxx-4.0.1 | 947 KB | ################################################################################################################################################################### | 100%
libcxxabi-4.0.1 | 350 KB | ################################################################################################################################################################### | 100%
zlib-1.2.11 | 90 KB | ################################################################################################################################################################### | 100%
setuptools-44.0.0 | 513 KB | ################################################################################################################################################################### | 100%
python-2.7.17 | 9.3 MB | ################################################################################################################################################################### | 100%
wheel-0.33.6 | 40 KB | ################################################################################################################################################################### | 100%
Preparing transaction: done
Verifying transaction: / WARNING conda.core.path_actions:verify(963): Unable to create environments file. Path not writable.
environment location: /Users/zhang/.conda/environments.txt done
Executing transaction: \ WARNING conda.core.envs_manager:register_env(52): Unable to register environment. Path not writable or missing.
environment location: /usr/local/anaconda3/envs/python27
registry file: /Users/zhang/.conda/environments.txt
done
#
# To activate this environment, use
#
# $ conda activate python27
#
# To deactivate an active environment, use
#
# $ conda deactivate

可以看到有警告(影响conda activate / conda deactivate切换环境,虽然可以用source activate / source deactivate代替)

Verifying transaction: / WARNING conda.core.path_actions:verify(963): Unable to create environments file. Path not writable.
environment location: /Users/zhang/.conda/environments.txt done
Executing transaction: \ WARNING conda.core.envs_manager:register_env(52): Unable to register environment. Path not writable or missing.
environment location: /usr/local/anaconda3/envs/python27
registry file: /Users/zhang/.conda/environments.txt
done

这个是因为Homebrew在安装anaconda时自动以root账户创建了~/.conda,而当前用户权限不足导致的,解决方法很简单,就是把这个目录下的文件权限全部改成当前用户可编辑:

$ sudo chmod 777 ~/.conda/*

然后删除有问题的环境并重建:

$ conda remove -n python27 --all
$ conda create --name python27 python=2.7

切换虚拟环境

安装完成后其实anaconda已经提示如何切换环境了:

#
# To activate this environment, use
#
# $ conda activate python27
#
# To deactivate an active environment, use
#
# $ conda deactivate

按照提示切换到python27环境,并用python --version验证:

# ~ [16:45:54]
$ conda activate python27
(python27)
# ~ [16:48:06]
$ python --version
Python 2.7.17 :: Anaconda, Inc.
(python27)

退出python27环境,并用python --version验证:

# ~ [16:53:10]
$ conda deactivate # ~ [16:53:25]
$ python --version
Python 3.7.4

查询虚拟环境

conda info -e可以列出所有环境。

包管理

anaconda默认有两个包管理器condapipconda是跨环境统一的,但是pip是各个环境隔离的。

默认的Python3环境:

# ~ [17:12:31]
$ conda info active environment : None
shell level : 0
user config file : /Users/zhang/.condarc
populated config files : /Users/zhang/.condarc
conda version : 4.7.12
conda-build version : 3.18.9
python version : 3.7.4.final.0
virtual packages :
base environment : /usr/local/anaconda3 (writable)
channel URLs : https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/osx-64
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/noarch
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/osx-64
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/noarch
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/osx-64
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/noarch
package cache : /usr/local/anaconda3/pkgs
/Users/zhang/.conda/pkgs
envs directories : /usr/local/anaconda3/envs
/Users/zhang/.conda/envs
platform : osx-64
user-agent : conda/4.7.12 requests/2.22.0 CPython/3.7.4 Darwin/19.2.0 OSX/10.15.2
UID:GID : 501:20
netrc file : None
offline mode : False # ~ [17:12:36]
$ pip --version
pip 19.3.1 from /usr/local/anaconda3/lib/python3.7/site-packages/pip (python 3.7)

切到Python27环境后:

# ~ [17:06:10]
$ conda info active environment : python27
active env location : /usr/local/anaconda3/envs/python27
shell level : 1
user config file : /Users/zhang/.condarc
populated config files : /Users/zhang/.condarc
conda version : 4.7.12
conda-build version : 3.18.9
python version : 3.7.4.final.0
virtual packages :
base environment : /usr/local/anaconda3 (writable)
channel URLs : https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/osx-64
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/noarch
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/osx-64
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/noarch
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/osx-64
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/noarch
package cache : /usr/local/anaconda3/pkgs
/Users/zhang/.conda/pkgs
envs directories : /usr/local/anaconda3/envs
/Users/zhang/.conda/envs
platform : osx-64
user-agent : conda/4.7.12 requests/2.22.0 CPython/3.7.4 Darwin/19.2.0 OSX/10.15.2
UID:GID : 501:20
netrc file : None
offline mode : False (python27)
# ~ [17:06:22]
$ pip --version
pip 19.3.1 from /usr/local/anaconda3/envs/python27/lib/python2.7/site-packages/pip (python 2.7)
(python27)

可以很明显的看出两者在环境隔离方面的差异。因此,每当创建一个虚拟环境,都需要重新设置一下pip的国内镜像

$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
$ pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

软件包安装

因为pip是各个环境独立一套的,因此和单个环境使用没有任何区别,软件包也是安装到各个虚拟环境的/site-packages/目录下,例如/usr/local/anaconda3/envs/python27/lib/python2.7/site-packages/

conda因为各个环境共用一套,所以在执行时需要指定环境,不指定就默认为当前活跃环境:

# 查看当前环境下已安装的包
conda list # 查看某个指定环境的已安装包
conda list -n python27 # 查找package信息
conda search numpy # 安装package
conda install -n python27 numpy
# 如果不用-n指定环境名称,则被安装在当前活跃环境
# 也可以通过-c指定通过某个channel安装 # 更新package
conda update -n python27 numpy # 删除package
conda remove -n python27 numpy

conda也能管理condapythonanaconda的版本:

# 更新conda,保持conda最新
conda update conda # 更新anaconda
conda update anaconda # 更新python
conda update python
# 假设当前环境是python 3.7, conda会将python升级为3.7.x系列的当前最新版本

IDE设置

开发总是离不开IDE,这里仅介绍PyCharm的设置,VS Code可以参考官方文档Using Python environments in VS Code

PyCharm

首先需要先创建好虚拟环境,还是以python27这个环境为例。

创建Project时选择环境

  1. 打开PyCharm,选择Create New Project

  2. 修改项目的名字,然后选择Project Interpreter》Existing Interpreter>...

  3. 选择Conda Environment==》... ,设置为之前创建的python27环境的文件夹

  4. 创建完工程,然后新建一个python文件,输出Hello world:

    print("Hello world")

已有Project修改环境





Mac保留Python2安装Python3(Anaconda3)的更多相关文章

  1. centos下保留python2安装python3

    1. 安装依赖环境 # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline- ...

  2. mac下如何安装python3?

    1. 安装homebrew $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/insta ...

  3. Mac上python2和python3的版本切换

    在命令行执行 vi ~/.bash_profile 在文件下面加上: alias python2='/system/Library/Frameworks/Python.framework/Versio ...

  4. Mac下 python2和python3共存

    一般是python2默认安装了,python3没有安装,这时候一般使用命令:brew install python3 进行安装 不同方法安装python的路径是不一样的,如下所示: 接下来就要看具体步 ...

  5. python2和python3同时安装

    现在很多项目用python2完成的,很多情况下2和3是同时存在的 大多人都是先安装了python2 安装python3: 下一步: 然后安装完成以后,去cmd控制台输入python看看安装成功了吗(用 ...

  6. Ubuntu安装Python3 和卸载

    Python2中文的解决 在py文件第一行添加 #coding=utf-8 1 规范的应该这么写 #-*- coding:utf-8 -*- 1 安装python 系统默认安装Python2 安装Py ...

  7. Mac同时安装python2和python3

    Mac同时安装python2和python3 Mac自带python2,但因为开发时所用但pythonkennel是3也可能是2,并且就算是python2,版本号也许和内置但python也有所不同.所 ...

  8. CentOS7下安装Python3及Pip3并保留Python2

    1. 安装依赖环境 # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline- ...

  9. CentOS7保留默认Python版本并安装更新Python2和Python3共存

    CentOS 7 默认的python版本是python2.7.5.因为yum依赖于默认的python版本的缘由,所以要先保留默认版本,并修改yum文件头部后,才能开始安装更新python2和pytho ...

随机推荐

  1. cnblogs 美化主题

    Silence主题 一个简洁的主题, 不带广告,我很喜欢 cnblogs 域名解析 这需要注意一点是:github.io项目名需要和用户名一致才能正确访问,否则会报404 Markdown格式化编辑 ...

  2. redis端口6379的由来

    有一个技巧,Redis端口号6379,是手机键盘上的MERZ.

  3. 爬虫之 cookie , 验证码,模拟登陆,线程

    需求文档的定制 糗事百科的段子内容和作者(xpath的管道符)名称进行爬取,然后存储到mysql中or文本 http://sc.chinaz.com/jianli/free.html爬取简历模板 HT ...

  4. tomcat+jenkins搭建持续化集成环境

    一.下载安装Tomcat 1.进入官网http://tomcat.apache.org/ 2.解压缩文件到指定目录 3.设置环境变量 a.新建CATALINA_HOME b.在path中设置 %CAT ...

  5. springboot mybatis 多数据源配置支持切换以及一些坑

    一 添加每个数据源的config配置,单个直接默认,多个需要显示写出来 @Configuration @MapperScan(basePackages ="com.zhuzher.*.map ...

  6. time 模块 和 random 模块常用方法讲解

    import timeprint(help(time))print(time.time())#时间戳 1573991312.5361328print(time.perf_counter())#计算CP ...

  7. Official VirusTotal Plugin for IDA Pro 7

    Official VirusTotal Plugin for IDA Pro 7 该插件在IDA Pro右键菜单(反汇编和字符串窗口)中添加了一个新的" VirusTotal"条目 ...

  8. 如何优雅的将Mybatis日志中的Preparing与Parameters转换为可执行SQL

    原文链接 疫情期间大家宅在家里是不是已经快憋出“病”了~~ ​ 公司给开了VPN,手机电脑都能连,手机装上APP测试包,就能干活了,所以walking从2020.02.01入京以来,已经窝在家里11天 ...

  9. HDU_3853_概率dp

    http://acm.hdu.edu.cn/showproblem.php?pid=3853 又因为总期望为子期望的加权和,加权因子为子期望的转移概率,所以得到:dp[ i ][ j ]= p1 * ...

  10. OpenCV实现图像变换(python)

    一般对图像的变化操作有放大.缩小.旋转等,统称为几何变换,对一个图像的图像变换主要有两大步骤,一是实现空间坐标的转换,就是使图像从初始位置到终止位置的移动.二是使用一个插值的算法完成输出图像的每个像素 ...