关于虚拟机:无意苦争春一任群芳妒M1-Mac-book能否支撑全栈工程师的日常Python3虚拟机DockerRedis

6次阅读

共计 6298 个字符,预计需要花费 16 分钟才能阅读完成。

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_187

就像大航海时代里忽然诞生的航空母舰一样,苹果把玩着手心里远超时代的 M1 芯片,微笑着对 Intel 说:“不好意思,尽管你也玩桌面芯片,然而,从明天开始,游戏就曾经完结了,X86?还是省省吧。”

十五年前,iPhone 横空出世,乔布斯通知世人什么才叫做真正的智能手机,十年前,A4 处理器粉墨出场,iPhone 霎时猛虎添翼,性能这两个字从此没有友商敢在苹果背后提及,iPad 更是在业界呼风唤雨,简直把整个平板市场都支出囊中,在人们的脑海中,Pad 就是 iPad 的代名词,安卓平板?不存在的。今时今日,Apple Silicon 富丽登台,不用说 M1 堪称恐怖到爆炸的性能,也不用说十个小时以上的超长续航以及丝滑无通畅的 FCPX 极速剪辑体验,单是通过 Rosetta 2 虚构运行 X86 利用,就曾经足以让人感到惊艳了。然而,这些福利只是苹果对于产品级用户的馈赠,作为一名开发者,而且是全栈 (全干) 开发,M1 是否应答简约的开发环境?就像一位研发共事说的那样:“Hi,哥儿们,你不会花一万大洋买了个 ipad+ 秒控键盘吧?这智商税有点贵啊”。

首先是 Python3 的开发环境,python 官网曾经释出适配 M1 芯片的 3.9 版本,https://www.python.org/downlo…,但其实目前生态和市场占有率最高的还是 3.7,笔者是通过迁徙助理将老 mac book pro 里的开发环境 (x86) 间接迁徙过去的,也就是迁徙了原电脑的 python3.7.4,令人意外的是,通过 Rosetta 2,大部分的根底库都能够应用,除了首次运行稍显通畅以外:

liuyue:~ liuyue$ python3  
Python 3.7.4 (v3.7.4:e09359112e, Jul  8 2019, 14:54:52)   
[Clang 6.0 (clang-600.0.57)] on darwin  
Type "help", "copyright", "credits" or "license" for more information.  
>>> import pandas  
>>> import cv2  
>>> import numpy  
>>> import matplotlib  
>>> import nltk  
>>> import ssl  
>>> from nltk.stem.lancaster import LancasterStemmer

然而一些深度学习框架比方 TensorFlow 就不行了,解决方案还是得从官网下载适配 M1 的 3.9 版本,而后再下载反对 M1 芯片的 Tensorflow2.4,下载链接:https://link.zhihu.com/?targe…\_and\_install.sh,换句话说,想用 TensorFlow 训练模型你就得降级 python 版本,可是很多 TensorFlow 我的项目都是和 Web 利用联合应用的,如果独自为了 TensorFlow 降级 python,就须要将原来的我的项目离开部署,接口也得重构,尤其一些“祖传我的项目”就更不好弄了,这无疑进步了开发者的开发成本。

再来说说测试,自动化测试工具 selenium 是咱们常常应用的工具之一,应用场景十分宽泛,然而在 M1 零碎外面咱们通过 Rosetta 2 虚构的 python3.7 是否管制 arm64 版本的 chrome 呢?答案是能够的,因为 chromedriver 曾经对 M1 芯片进行了适配,下载驱动:http://npm.taobao.org/mirrors… 留神要抉择 m1 版本的驱动,随后解压,将 chromedriver 文件拷贝到系统目录中:

sudo mv chromedriver /usr/local/bin

随后启动浏览器:

from selenium import webdriver  
import time  
  
  
#selenium 截图  
driver = webdriver.Chrome()  
driver.get('https://v3u.cn')  
time.sleep(3)
driver.close()

问题并不大,所以如果单纯用 M1 Mac 用来写自动化测试脚本或者爬虫不会有太大压力,然而,如果波及科学计算的后果测试,可能就得折腾一下了。

再聊聊虚拟机,虚拟机无论是测试岗还是运维岗根本都会用到,因为有些利用在 Win 和 Mac 零碎中展现出的成果不尽相同,目前虚拟机两大巨头 Vmware 和 Parallels 都在加紧适配,Parallels 当先一步,首先释出了兼容 M1 芯片的测试版虚拟机,不过须要先注册获取注册码:https://b2b.parallels.com/app…

随后在该页面下载安装包进行装置即可,须要留神的一点是,注册的时候肯定要记录一下注册码,否则装置胜利后没有码进行激活就难堪了。

与此同时微软也适时的公布了基于 arm 内核的 win10 测试版镜像,下载地址:https://www.microsoft.com/en-… 当然了,因为一些家喻户晓的学术问题,导致下载速度不尽如人意,笔者曾经将安装包和镜像上传网盘,在文章底部会贴出来。

装置好 Parallels 当前,将 arm 版 win10 镜像导入即可装置,只须要 5 分钟左右就能够装置胜利:

尽管是测试版,然而整体上运行起来十分行云流水,别忘了在零碎内增加中文默认语言包:

在 M1 Mac 中玩虚拟机,简直没有通畅感,顺滑的令人咋舌,风扇岿然不动,且能耗也并没有显著减少,续航也没有因为虚拟机的呈现而缩小太多,这是 M1 十分惊艳的一点。

想要用 Mac 做开发,包管理工具 Homebrew 是无奈绕过的一环,所以如果你是通过迁徙助理把老的 x86 架构的间接迁徙到 M1 的 mac 中,那么最好别用了,会出很多问题,解决方案就是装置 arm 版的 Homebrew

执行装置命令:

/bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh)"

基于 arm 的 Homebrew 对立装置在零碎的 /opt/homebrew 目录,次要是为了和老版的 x86 区别开。

随后增加环境变量:

echo export PATH=/opt/homebrew/bin:$PATH >> ~/.bash_profile   
source ~/.bash_profile

接着执行:

liuyue:~ liuyue$ brew update  
Already up-to-date.  
liuyue:~ liuyue$

如果返回 Already up-to-date. 就没问题了,基本上目前 Homebrew 大略有 7 成左右的软件反对 M1 芯片,具体适配列表能够参照:https://github.com/Homebrew/b…

能够看到,像数据库如 mysql、redis 都进行了适配,mysql 还有一些小 bug,介意的同学能够思考 Rosetta,上面咱们来看看用 arm 版的 Homebrew 来装置 reids 的流程:

装置命令:

brew install redis

个别 brew 会获取最新稳定版,装置胜利后,查看软件列表:

liuyue:~ liuyue$ brew list  
openssl@1.1    redis  
liuyue:~ liuyue$

此时启动服务:

liuyue:bin liuyue$ redis-server  
36148:C 24 Feb 2021 21:13:48.673 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo  
36148:C 24 Feb 2021 21:13:48.673 # Redis version=6.2.0, bits=64, commit=00000000, modified=0, pid=36148, just started  
36148:C 24 Feb 2021 21:13:48.673 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf  
36148:M 24 Feb 2021 21:13:48.673 * Increased maximum number of open files to 10032 (it was originally set to 256).  
36148:M 24 Feb 2021 21:13:48.673 * monotonic clock: POSIX clock_gettime  
                _._                                                    
           _.-``__ ''-._                                               
      _.-``    `.  `_.  ''-._           Redis 6.2.0 (00000000/0) 64 bit  
  .-`` .-```.  ```\/    _.,_ ''-._                                     
 ('      ,       .-`  | `,)     Running in standalone mode  
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379  
 |    `-._   `._    /     _.-'    |     PID: 36148  
  `-._    `-._  `-./  _.-'_.-'                                     
 |`-._`-._    `-.__.-'_.-'_.-'|                                    
 |    `-._`-._        _.-'_.-'    |           http://redis.io          
  `-._    `-._`-.__.-'_.-'    _.-'|`-._`-._    `-.__.-'    _.-'_.-'|                                    
 |    `-._`-._        _.-'_.-'    |                                    
  `-._    `-._`-.__.-'_.-'    _.-'`-._    `-.__.-'    _.-'`-._        _.-'                                             
              `-.__.-'

而后开启另一个命令行连贯服务:

liuyue:~ liuyue$ redis-cli  
127.0.0.1:6379> ping  
PONG  
127.0.0.1:6379>

能够看到和 x86 的 brew 用起来没有区别,只不过下面的软件或多或少有些 bug,用起来要小心。

如果你感觉 arm 版的 brew 速度过慢,能够独自设置国内源:

git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git  
  
  
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git  
  
  
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git  
  
  
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile  
source ~/.bash_profile

中科大的镜像略微靠谱一点。

有同学说,那还有三成的软件怎么搞?另外看起来 arm 的 brew 并不打算适配老版本软件,比方 python3.7,其实在 M1 的 mac 零碎也能够装一版 x86 的 brew,装置 x86 的 Homebrew:

arch -x86_64 /bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh)"

装好之后,它还是在原来的 /usr/local/bin/brew 外面,这样就和 /opt/homebrew/bin/brew 辨别开了

执行命令:



liuyue:~ liuyue$ /usr/local/bin/brew list  
autoconf    gmp        libtool        openssl@1.1    siege  
automake    icu4c        libyaml        perl        sqlite  
boost        isl        lua        pkg-config    thrift  
coreutils    libevent    mkcert        python@3.8    trash  
gcc        libgpg-error    mpfr        readline    xz  
gdbm        libksba        mtr        redis        yarn  
gettext        libmpc        node        ruby        zlib

能够看到这些都是我从老的 x86 电脑中迁徙过去的软件,大部分都用不了,比方 redis,而基于 arm 的 brew 装置的新 redis 是能够应用的:

liuyue:~ liuyue$ /opt/homebrew/bin/brew list  
openssl@1.1    redis

所以用 M1 mac 做开发,就有点分列,新软件包记住用 /opt/homebrew/bin/brew,老的用:/usr/local/bin/brew

接着来看看 Docker,Docker 官网对于 M1 的适配还是很器重的,早些时候放进去一个测试版客户端:https://docs.docker.com/docke…

不仅能够拉取 arm 版的镜像,也能够操作 Kubernetes,对于 Kubernetes 不相熟的同学能够参照这篇文章:一寸宕机一寸血,十万容器十万兵 |Win10/Mac 零碎下基于 Kubernetes(k8s)搭建 Gunicorn+Flask 高可用 Web 集群。

不过令人遗憾的是,Docker Hub 反对 arm 版本的镜像并不多,大抵在 x86 镜像的三、四成左右,然而能够看进去各大厂商对于 M1 都是比拟看重的,基本上官网都有适配的音讯流出。

对于其余的语言来说,比方 go lang、ruby、以及 php 等,都有一个和 python 一样的通病,就是老版本不反对 arm 内核,只适配了最近的一个或者两个版本,这样也导致如果你换电脑的话,就得思考向下兼容性问题。

对于一些罕用的开发软件,比方 vscode 和 sublime 3 都能够失常运行,php 套件 xampp 运行无障碍,版本控制客户端 SourceTree、数据库客户端 Navicat、微信、QQ、SSH 客户端 iTerm 4 以及 Ftp 客户端 FileZilla 都能够失常运行,前端微信小程序开发工具还是会有几率闪退,腾讯一开始对 big sur 就适配的不好,M1 就更别提了。

值得一提的是,设计软件 Photoshop 最新版 2021 临时还不反对 M1 芯片,只能对付先用 2019 版的,与之造成比照的就是 FCPX10.5 的完满体现,看来还是亲儿子给力,Adobe 还得加把劲了。

综上,如果您是一个初学者,只是想学习一些语言的根底语法,没打算写一些简单工业级我的项目,能够思考动手 M1,它将会是您入门的好帮手,然而如果您在业内曾经混迹多年,常常编译一些简单代码、各种库,甚至手里还有一些“祖传代码”我的项目在保护,那么 x86 的 Mac 可能还得陪您一两年。

最初,下面提到的适配 M1 芯片的安装包和镜像请移步:

链接: https://pan.baidu.com/s/12d7fHl\_ZYyx4Xk-v0R0N\_g 明码: 1fdc 须要的同学自行下载

结语:有时候,当咱们称誉一项技术的时候,咱们会称其为这样或者那样的行业标杆、教科书之类,然而对于 M1 的 Mac book 来说,它如同曾经超过了所谓的标杆,而成为了逾越时代的不朽经典。苹果作为业内完满的六边形兵士,还仍然在摸索,仍然没有裹足不前,持续摸索新的路线,持续钻研可行性,这是它带给咱们的启发,然而,在 2021 年的这个春天里,面对开发者,M1 芯片有点像悲情的俄尔普斯,它能用动人的绕梁琴声感动开发者们,却在最初一秒钟忍不住回眸,葬送解救爱妻欧莉蒂克的最初机会,很显著,它曾经足够致力,然而还差那么一点点,就差一点了,然而我置信,神明早已在 M1 的命格中写下四个字:注定辉煌。

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_187

正文完
 0