给zsh来把翻墙弹椅

起因是要安装一个基于Python的命令行工具gitsome 。过程相当傻瓜,利用 pip 即可一步安装:

$ pip install gitsome

然鹅,运行gitsome后提示本地python版本可以入土了。

事实上,为了以防万一,本地系统配备了2.7和3.7两个版本,只不过系统环境变量是2.7。

安装pyenv

如何管理多版本的python呢?首先想到了借助热门方案-pyenv工具:

$ brew install pyenv

配置脚本文件,将下列代码写入.zshrc末尾

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

if which pyenv > /dev/null;
  then eval "$(pyenv init -)";
fi

之后生效配置:

$ source ~/.zshrc

开始用pyenv管理python

$ pyenv versions        # 查看本机安装版本
$ pyenv install 3.7.3   # 安装 python
$ pyenv uninstall 3.7.3 # 卸载 python
$ pyenv install -l      #查看可安装 Python 版本

然鹅,运行下列命令,严重怀疑被墙了。

pyenv install 3.7.3

既然如此,给终端来一把翻墙弹椅吧。

为zsh配置socks代理开关

由于有现成的ShadowsocksX-NG-R ,只需要挖掘一个代理端口即可。

修改zsh设置文件

$ vim ~/.zshrc

在末尾写入如下代码:

# where need proxy
proxy () {
  export http_proxy="socks5://127.0.0.1:1086"
  export https_proxy="socks5://127.0.0.1:1086"
  echo "Socks Proxy on"
}

# where need noproxy
noproxy () {
  unset http_proxy
  unset https_proxy
  echo "Socks Proxy off"
}

之后生效配置:

$ source ~/.zshrc

或者直接设置alias

alias setproxy="export ALL_PROXY=socks5://127.0.0.1:1086"
alias unsetproxy="unset ALL_PROXY"

验证一下,成功!

$ curl myip.ipip.net # 或者curl cip.cc
当前 IP:149.129.87.244  来自于:中国 香港   阿里云

设置python优先级

一直觉得Python多版本管理是个令人头痛的烫手山芋,但是有了pyenv后,可以轻松通过global、local、shell来切换优先级。切换后可通过which python或者是python –version来查看是否生效。三者的优先级如下:

shell > local > global

说明:pyenv 会从当前目录开始向上逐级查找.python-version文件,直到根目录为止。若找不到,就用global版本。

$ pyenv global 3.7.3

说明:设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。

$ pyenv local 3.7.3

说明:设置 Python 本地版本,通过将版本号写入当前目录下的 .python-version 文件的方式。通过这种方式设置的 Python 版本优先级较 global 高。

尾声

原以为「万事俱备,只欠东风」。然鹅,即便开启了代理安装还是失败了。不死心地放狗搜了一圈,才发现跟GFW无关,原来是特定macOS版本下pyenv的Bug:pyenv install fails to build 2.7.14 with ImportError: No module named pyexpat ,升级Macos可解,重新来一遍就好了。