由于有一次ELK的升级文档写了半天,却忘记保存,以为自动保存的,结果发现没有了,打击了积极心,很久不曾更新这个博客,但是最近开发一个项目,需要python的多环境,使用的技术pyenv和pyvenv,最初几个概念老是搞混,耽误了很多时间,网上各种博客也没有解释清楚(当然也有可能是自己理解有误),这里就把我的一些理解说出来,供大家参考下:
这里介绍几个工具:pyenv、pyvenv、 venv、virtualenv、pyenv-virtualenv
virtualenv: 是针对python的包的多版本管理,通过将python包安装到一个模块来作为python的包虚拟环境,通过切换目录来实现不同包环境间的切换。其实不是非常爱捣腾的话,此工具就已经可以应付同python版本多环境问题了,安装使用也非常简单
virtualenvwrapper: 是一组对virtualenv的扩展(请参阅docs )。 它给你的命令像mkvirtualenv , lssitepackages ,特别是在不同的virtualenv目录之间切换的工作。 如果您想要多个virtualenv目录,此工具特别有用,由于我使用的pycharm来开发的,每个项目里面一个,所以这个对我来说没啥用
pyenv: 用于隔离Python版本,这样可以来系统中随意使用python版本,而不至于影响到线上环境
pyenv-virtualenv: pyenv-virtualenv是与pyenv相同的作者pyenv的插件,可以方便地同时使用pyenv和virtualenv,如果是用vim进行开发的话,那么这个非常的方便,但是由于我使用的是pycharm开发,所以这里我并没有使用.
pyvenv:是Python 3附带的脚本但是 在Python 3.6中弃用 因为它有问题(更不用说令人困惑的名字)。在Python 3.6+中,确切的等价物是 python3 -m venv
venv: 是Python 3附带的一个包,您可以使用它运行 python3 -m venv (虽然由于某种原因,一些发行版将它分成一个单独的发行版包,例如 python3-venv 在Ubuntu / Debian上)。它的用途与此类似 virtualenv,并以非常类似的方式工作,但它不需要复制Python二进制文件(除了在Windows上)。如果你不需要支持Python 2可以尝试.实际上我部分业务的部署是使用的这个模块
pip install virtualenv
#创建
cd project_dir
virtualenv venv
virtualenv -p /usr/local/bin/python3 venv # 指定python版本
#激活虚拟环境(autoenv感兴趣的人可以试试,自动激活)
cd venv
source ./bin/activate
#退出虚拟环境
deactivate
我这里用pyenv管理python模块,所以解释器的路径如上图所示,大家可以根据自己的需要在Base interpreter:那栏里填上自己想要的python版本(相当于指令指定python版本),可以放心使用,不会影响到本身的python
brew install pyenv
brew intall pyenv-virtualenv
echo -ne “
export PYENV_ROOT=/usr/local/var/pyenv
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
“ >> ~/.zshrc
brew link zlib --force
#install
CFLAGS="-I$(brew --prefix openssl)/include -I$(xcrun --show-sdk-path)/usr/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install -v 3.6.3
pyenv rehash
# 卸载
$ pyenv uninstall 2.7.3
#常见错误
1、如果提示没有pip这个指令
pyenv shell 2.7.5
curl https://bootstrap.pypa.io/get-pip.py | python
#pyenv常用指令
pyenv virtualenv 2.7.5 env275
pyenv virtualenv-delete env275
$ pyenv shell pypy-2.2.1
$ pyenv shell —unset
$ pyenv activate env271
# 退回到系统环境
$ pyenv deactivate