编程环境搭建

本文最后更新于:2023年6月19日 晚上

写在前面,本文主要基于https://f5soft.site/zh/notes/2021/0214/ 一文写成,用于记录安装过程中遇到的各种问题,便于日后快速复盘。

安装 python

通过 Homebrew 安装 python3.9。
系统自带 python2.7 和 python3.8.9,这个作者说安装一下原生支持 arm 的 python,于是我就安装了。
通过

1
brew install python3

即可安装 arm 版本的 3.9.1,其路径在/opt/homebrew/bin/python3

安装好之后,需要通过pip3安装一些基本的第三方库。由于这里是 macos-arm64 平台,因此很多库都没有来得及提供该平台的 wheel,导致很多库都需要通过手动编译安装,而且编译过程往往出错。下面是常用库的 arm 版本的安装方法整理:

库名称 pip3 install 是否需要编译,编译是否成功 安装方法
numpy 需要编译,安装成功
scipy 不知道是不是高铁上网不好,pip 失败 brew install scipy
matplotlib 需要编译,安装成功
pandas 成功
sympy 成功
cv2 无相应轮子 brew install opencv (花了巨长时间下载)python 里面 import cv2 即可验证
pycrypto 编译成功
requests 编译成功
jupyter 编译成功
scapy 编译成功
regex 直接安装

首先是 numpy,我一开始使用

1
matr1x@matr1xdeMacBook-Air ~ % pip3 install numpy

调用的是系统自带的 python3.8 的 pip3,然后它被安装在了

然后,我发现其实 brew 下也是有 pip3 和 pip3.9 的,应该是 pip3 的顺序系统的比较靠前,然后我使用了

1
2
matr1x@matr1xdeMacBook-Air ~ % echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
matr1x@matr1xdeMacBook-Air ~ % eval "$(/opt/homebrew/bin/brew shellenv)"

此时发现

1
2
matr1x@matr1xdeMacBook-Air ~ % which pip3
/opt/homebrew/bin/pip3

再次运行

此时查看路径

安装 conda

由于 Anaconda 没有支持 arm,但是 miniforge 已经支持。

1
brew install --cask miniforge

自动链接,查看结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
matr1x@matr1xdeMacBook-Air ~ % conda list
# packages in environment at /opt/homebrew/Caskroom/miniforge/base:
#
# Name Version Build Channel
brotlipy 0.7.0 py39h5161555_1003 conda-forge
ca-certificates 2021.10.8 h4653dfc_0 conda-forge
certifi 2021.10.8 py39h2804cbe_1 conda-forge
cffi 1.15.0 py39h52b1de0_0 conda-forge
charset-normalizer 2.0.9 pyhd8ed1ab_0 conda-forge
colorama 0.4.4 pyh9f0ad1d_0 conda-forge
conda 4.11.0 py39h2804cbe_0 conda-forge
conda-package-handling 1.7.3 py39h5161555_1 conda-forge
cryptography 36.0.0 py39hfb8cd70_0 conda-forge
idna 3.1 pyhd3deb0d_0 conda-forge
libffi 3.4.2 h3422bc3_5 conda-forge
libzlib 1.2.11 hee7b306_1013 conda-forge
ncurses 6.2 h9aa5885_4 conda-forge
openssl 1.1.1l h3422bc3_0 conda-forge
pip 21.3.1 pyhd8ed1ab_0 conda-forge
pycosat 0.6.3 py39h5161555_1009 conda-forge
pycparser 2.21 pyhd8ed1ab_0 conda-forge
pyopenssl 21.0.0 pyhd8ed1ab_0 conda-forge
pysocks 1.7.1 py39h2804cbe_4 conda-forge
python 3.9.7 h54d631c_3_cpython conda-forge
python_abi 3.9 2_cp39 conda-forge
readline 8.1 hedafd6a_0 conda-forge
requests 2.26.0 pyhd8ed1ab_1 conda-forge
ruamel_yaml 0.15.80 py39h5161555_1006 conda-forge
setuptools 59.4.0 py39h2804cbe_0 conda-forge
six 1.16.0 pyh6c4a22f_0 conda-forge
sqlite 3.37.0 h72a2b83_0 conda-forge
tk 8.6.11 he1e0b03_1 conda-forge
tqdm 4.62.3 pyhd8ed1ab_0 conda-forge
tzdata 2021e he74cb21_0 conda-forge
urllib3 1.26.7 pyhd8ed1ab_0 conda-forge
wheel 0.37.0 pyhd8ed1ab_1 conda-forge
xz 5.2.5 h642e427_1 conda-forge
yaml 0.2.5 h642e427_0 conda-forge
zlib 1.2.11 hee7b306_1013 conda-forge

可以看到和 pip3 的相比少了很多库。暂时没找到相应的简单方法,只能创建虚拟环境的时候再下一遍了。

安装 tensorflow2.4

亲测有效,但无法调用 GPU。
https://www.cnblogs.com/practitioners/p/15514567.html
先创建 yml,注意,用 vscode 创建。(系统自带的文本编辑器只能导出 trf 格式的文件,很离谱)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
name: apple_tensorflow
channels:
- conda-forge
- nodefaults
dependencies:
- grpcio
- h5py
- ipython
- numpy
- pip=20.2.4
- python=3.8
- scipy
- termcolor
- typeguard
- wheel
- absl-py
- astunparse
- python-flatbuffers
- gast
- google-pasta
- keras-preprocessing
- opt_einsum
- protobuf
- tensorboard
- tensorflow-estimator
- termcolor
- typing_extensions
- wrapt

然后

1
conda env create --file=/Users/matr1x/Documents/env.yml  --name=tensorflow

之后激活并安装

1
2
(base) matr1x@matr1xdeMacBook-Air ~ % conda activate tensorflow
(tensorflow) matr1x@matr1xdeMacBook-Air ~ % pip install --upgrade --force --no-dependencies https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha3/tensorflow_addons_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
(tensorflow) matr1x@matr1xdeMacBook-Air ~ % python
Python 3.8.12 | packaged by conda-forge | (default, Oct 12 2021, 21:21:17)
[Clang 11.1.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> print(tf.__version__)
2.4.0-rc0
>>> from tensorflow.keras import layers
>>> from tensorflow.keras import models
>>> model = models.Sequential()
>>> model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
>>> model.add(layers.MaxPooling2D((2, 2)))
>>> model.add(layers.Conv2D(64, (3, 3), activation='relu'))
>>> model.add(layers.MaxPooling2D((2, 2)))
>>> model.add(layers.Conv2D(64, (3, 3), activation='relu'))
>>> model.add(layers.Flatten())
>>> model.add(layers.Dense(64, activation='relu'))
>>> model.add(layers.Dense(10, activation='softmax'))
>>> model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 11, 11, 64) 18496
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 3, 3, 64) 36928
_________________________________________________________________
flatten (Flatten) (None, 576) 0
_________________________________________________________________
dense (Dense) (None, 64) 36928
_________________________________________________________________
dense_1 (Dense) (None, 10) 650
=================================================================
Total params: 93,322
Trainable params: 93,322
Non-trainable params: 0
_________________________________________________________________
>>> from tensorflow.keras.datasets import mnist
>>> from tensorflow.keras.utils import to_categorical
>>> (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
>>> train_images = train_images.reshape((60000, 28, 28, 1))
>>> train_images = train_images.astype('float32') / 255
>>> test_images = test_images.reshape((10000, 28, 28, 1))
>>> test_images = test_images.astype('float32') / 255
>>> train_labels = to_categorical(train_labels)
>>> test_labels = to_categorical(test_labels)
>>> model.compile(optimizer='rmsprop',
... loss='categorical_crossentropy',
... metrics=['accuracy'])
>>> model.fit(train_images, train_labels, epochs=5, batch_size=64)


模型是训练出来了,但是不能调用 gpu。
https://www.jianshu.com/p/0b5342f4af95 这篇文章也提到了,不过说 tf2.5 可以调用 gpu,我先不管了,这个能用就行。
而关于 2.5 的 tf,可以查看https://makeoptim.com/deep-learning/tensorflow-metal
and https://www.icode9.com/content-4-1210377.html
不过得升级到 mac os 12+

安装 java

首先退出 conda 环境

1
conda deactivate

可在官网下载全部的 JDK8 ~ JDK16 的 macos-arm64 版本的 JDK。
https://www.azul.com/downloads/zulu-community/?package=jdk

1
2
3
4
5
6
7
8
9
10
(base) matr1x@matr1xdeMacBook-Air ~ % which java
/usr/bin/java
(base) matr1x@matr1xdeMacBook-Air ~ % file /usr/bin/java
/usr/bin/java: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
/usr/bin/java (for architecture x86_64): Mach-O 64-bit executable x86_64
/usr/bin/java (for architecture arm64e): Mach-O 64-bit executable arm64e
(base) matr1x@matr1xdeMacBook-Air ~ % file /usr/bin/javac
/usr/bin/javac: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
/usr/bin/javac (for architecture x86_64): Mach-O 64-bit executable x86_64
/usr/bin/javac (for architecture arm64e): Mach-O 64-bit executable arm64e

下载后安装即可。

安装 nodejs

1
2
3
brew install node
(base) matr1x@matr1xdeMacBook-Air ~ % node -v
v17.4.0

安装 PHP

1
brew install php

Terminal 美化

非常简单。 1.下载字体,安装,并将终端字体改为它。

  1. brew install romkatv/powerlevel10k/powerlevel10k
  2. echo “source $(brew –prefix)/opt/powerlevel10k/powerlevel10k.zsh-theme” >>~/.zshrc
  3. p10k configure

安装 oh-my-zsh

上网搜一下官网,找到命令,安装即可。

由于被墙,因此推荐国内镜像安装。

https://blog.csdn.net/qq_39530754/article/details/104714976
重新安装主题:

1
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

配置

1
2
3
vim ~./zshrc
修改
ZSH_THEME="powerlevel10k/powerlevel10k"

安装插件

1
2
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

如果暂时无法 clone,将网址替换成镜像地址再次尝试。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!