1# @Time    : 2019-12-07
2# @Language: Markdown
3# @Software: VS Code
4# @Author  : Di Wang
5# @Email   : [email protected]

对于控制领域而言,目前常用的epics Python support有CaChannel, caffi, caproto, Cothread, pvaPy和 PyEpics 3. 不同的用户有不同的偏好软件,而哪怕是同一个软件也存在版本更迭。Python环境的管理一直是个大难题,包括Python版本和库依赖管理,在尝试了几种方式后,目前选择了pyenv+pyenv-virtualenv的方式。

pyenv

pyenv at GitHub

简单介绍下pyenv的工作原理:

操作系统在解析PATH时按照从左到右的顺序,若找到特定的可执行文件executable file则停止。

pyenv就是通过在PATH中添加shims,可翻译为垫片,来覆盖不同版本的Python路径。例如若/usr/local/bin中有python2.7,而你在$(pyenv root)/shims下通过pyenv安装了python3.6,你的程序就会使用python3.6

$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin

在安装pyenv后,默认安装在~/目录,即当前用户的根目录,安装之后可以通过pyenv安装不同版本的Python,Python安装目录都在pyenv目录下:

  • $(pyenv root)/versions/2.7.8/
  • $(pyenv root)/versions/3.4.2/
  • $(pyenv root)/versions/pypy-2.4.0/

安装

按照github repository的介绍,通过git checkout pyenv到本地, 如果在服务器上安装,别忘记设置代理服务器的环境变量:http_proxyhttps_proxy

1$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

然后在你的shell启动脚本中设置环境变量,我使用的是zsh

1$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
2$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc

初始化pyenv

1$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshrc

然后重启shell就能生效了 exec "$SHELL" 或者 source ~/.zshrc

使用

之后就可以使用pyenv了,支持的命令如下。(virtualenv等下安装)

1activate            exec                init                rehash              uninstall           version-file-read   versions            virtualenv-prefix
2commands            global              install             root                version             version-file-write  virtualenv          virtualenvs
3completions         help                local               shell               --version           version-name        virtualenv-delete   whence
4deactivate          hooks               prefix              shims               version-file        version-origin      virtualenv-init     which

常用的命令介绍

安装特定版本的Python,更新shims(每次安装或卸载版本都要rehash进行更新),查看系统中的Python版本。

1$ pyenv install 3.7.6
2$ pyenv rehash
3$ pyenv versions
4  system
5* 3.7.6 (set by /home/sdcswd/.pyenv/version)
6  miniconda3-3.19.0

可以通过local shell global这三个命令灵活的改变Python的版本。

  • global: 设置全局的Python版本。
  • local: 设置当前目录下的Python版本,会覆盖global的设置,可分别设置不同项目的Python版本。极其有用。
  • shell: 设置当前shell的Python版本,退出shell就没了,一旦设置就会覆盖localglobal。(至今没用过…
1$ pyenv local 2.7.6
2$ pyenv local --unset
3$ pyenv global 2.7.6
4$ pyenv shell pypy-2.2.1

pyenv-virtualenv

pyenv-virtualenv at GitHub

pyenv-virtualenv是用来管理Python虚拟环境的,对不同的项目设置虚拟环境可以灵活的为不同的项目创建干净独立的运行环境。

安装

安装基本和pyenv一样,从github下载

1$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

可以选择是否设置pyenv virtualenv-init进行自动激活虚拟环境,即进入某个设置了虚拟环境的目录就激活虚拟环境,我感觉还是非常方便的,建议设置。

1$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

使用

创建虚拟环境,列出虚拟环境(目录和上面不一样是因为我换了另一台电脑),激活和退出(如果上面设置了就不用自己激活了)

1$ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
2$ pyenv virtualenvs
3    miniconda3-3.19.0 (created from /Users/sdcswd/.pyenv/versions/miniconda3-3.19.0)  
4    miniconda3-3.19.0/envs/PV_crawler (created from /Users/sdcswd/.pyenv/versions/miniconda3-3.19.0/envs/PV_crawler)  
5    miniconda3-3.19.0/envs/pydm-environment (created from /Users/sdcswd/.pyenv/versions/miniconda3-3.19.0/envs/pydm-environment)
6$ pyenv activate <name>
7$ pyenv deactivate

如果习惯使用conda,也可以使用conda来创建和查看虚拟环境,命令pyenv virtualenvsconda env list都可以显示系统中的虚拟环境。

PyEepics

然后安装epics Python库,我习惯使用pyepics。

使用pip安装 pip install pyepics,然后就能使用EPICS了。

1$ python
2Python 3.7.6 (default, Jan 13 2020, 16:58:46)
3[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
4Type "help", "copyright", "credits" or "license" for more information.
5>>> import epics
6>>> epics.caget("LIiEV:BGATE:LER:gun")
763.0