pyenv和virtualenv的安装与使用

2019-02-16 07:34:58   Python

配置环境:

  • CentOS release 6.8 、Ubuntu15.10
  • pyenv 、virtualenv

在工作开发中,一直使用 virtualenv 来管理python的包环境。很好的解决了不同项目使用不同python包的需求。对于多python版本的问题如何解决一直无解,虽然可以安装多个

版本的python,靠绝对路径或靠创建虚拟环境的时候指定python(virtualenv -p)版本来解决,但总感觉不是那么的优雅。同事推荐了 pyenv ,一直没用过,特从网上找了些资料试着配置了下,记录如下。

pyenv vs virtualenv

pyenv 是针对 python 版本的管理,通过修改环境变量的方式实现;

virtualenv 是针对python的包的多版本管理,通过将python包安装到一个模块来作为python的包虚拟环境,通过切换目录来实现不同包环境间的切换。

pyenv 原理

pyenv 的美好之处在于,它并没有使用将不同的 $PATH 植入不同的 shell 这种高耦合的工作方式,而是简单地在 $PATH 的最前面插入了一个垫片路径(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin。所有对 Python 可执行文件的查找都会首先被这个 shims 路径截获,从而架空了后面的系统路径。

pyenv 安装使用

Mac

brew update
brew install pyenv

自动安装

pyenv 提供了自动安装的工具,执行命令安装即可:

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

需保证系统有 git ,否则需要新安装git工具。

手动安装

将 pyenv 检出到你想安装的目录。建议路径为:$HOME/.pyenv

 $ cd
 $ git clone git://github.com/yyuu/pyenv.git .pyenv

添加环境变量。PYENV_ROOT 指向 pyenv 检出的根目录,并向 $PATH 添加 $PYENV_ROOT/bin 以提供访问 pyenv 这条命令的路径

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

这里的 shell 配置文件(~/.bash_profile)依不同 Linux 而需作修改——Zsh:~/.zshrc;Ubuntu:~/.bashrc

向 shell 添加 pyenv init 以启用 shims 和命令补完功能

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

配置文件的位置同上一条一样需要修改

重启 shell(因为修改了 $PATH)

$ exec $SHELL

pyenv 常用命令

python配置

  • $ pyenv versions -- 查看系统当前安装的python列表
  • $ pyenv install -v 3.5.1 -- 安装python
  • $ pyenv uninstall 2.7.3 -- 卸载python
  • $ pyenv rehash -- 创建垫片路径(为所有已安装的可执行文件创建 shims,如:~/.pyenv/versions//bin/,因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令)

python切换

  • $ pyenv global 3.4.0 -- 设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。
  • $ pyenv local 2.7.3 -- 设置面向程序的本地版本,通过将版本号写入当前目录下的 .python-version 文件的方式。通过这种方式设置的 Python 版本优先级较 global 高。 pyenv 会从当前目录开始向上逐级查找 .python-version 文件,直到根目录为止。若找不到,就用 global 版本。
  • $ pyenv shell pypy-2.2.1 -- 设置面向 shell 的 Python 版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。这个版本的优先级比 local 和 global 都要高。--unset 参数可以用于取消当前 shell 设定的版本。
  • $ pyenv shell --unset

python优先级

shell > local > global

pyenv 插件: pyenv-virtualenv

安装

使用自动安装pyenv 后,它会自动安装部分插件,通过pyenv-virtualenv 插件可以很好的和 virtualenv 结合:

[root@linux3311 ~]# cd .pyenv/plugins/
[root@linux3311 plugins]# ll
insgesamt 24
drwxr-xr-x. 4 root root 4096 19. Jun 05:17 pyenv-doctor
drwxr-xr-x. 5 root root 4096 19. Jun 05:18 pyenv-installer
drwxr-xr-x. 4 root root 4096 19. Jun 05:18 pyenv-update
drwxr-xr-x. 7 root root 4096 19. Jun 05:18 pyenv-virtualenv
drwxr-xr-x. 4 root root 4096 19. Jun 05:18 pyenv-which-ext
drwxr-xr-x. 5 root root 4096 19. Jun 05:17 python-build

手动安装

git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv   
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
source ~/.bash_profile

使用

  • 创建虚拟环境 $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
  • 若不指定python 版本,会汇报认使用当前环境python版本。
  • 列出当前虚拟环境 pyenv virtualenvs
  • 激活虚拟环境 pyenv activate
  • 退出虚拟环境 pyenv deactivate
  • 删除虚拟环境 pyenv uninstall my-virtual-env

使用pyenv 来管理python,使用 pyenv-virtualenv 插件来管理多版本 python包。

此时,还需注意,当我们将项目运行的 env 环境部署到生产环境时,由于我们的python 包是依赖python 的,需要注意生产环境的python版本问题。

使用virtualenv来部署django应用,大大缩减了我们搭建环境的时间。初次使用,以为创建好的env可以直接复制使用。实际使用时,确遇到了各种问题。

env在不同环境下使用,还是需要简单修改配置的。今天测试了下,必须确保如下几点,才可使用:

  • 确保env 的存放路径和 activate 中 VIRTUAL_ENV 路径一致。

  • 确保python 的版本及安装路径一致。因为,env环境 lib 中的python 库是指向实际python库的链接,并非真正的库文件。

原文链接:https://segmentfault.com/a/1190000005859547, http://pylixm.cc/posts/2016-01-18-Virtualenv-user.html

vien.tech版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/30
欢迎小伙伴们在下方评论区留言 ~ O(∩_∩)O
文章对我有帮助, 点此请博主吃包辣条 ~ O(∩_∩)O

猜你喜欢


评论

There are no comments yet.
未登录

登录后即可发表评论

登录或注册

标签

AdSense Anaconda Android API apt Auth AWS B-tree Bandwagon Blog bower brew bytes Caffe Catalina cloudcone Composer conda CPU crontab CSS Cuda cv2 datetime Digitalocean DNS Docker Docker-Compose export Flask FTP GET Git GitHub Gmail GoDaddy Google GTM hash Homebrew Homestead HTML http HTTPS IDEA image imagemagick imagick imgick import InnoDB ISO8601 iTerm2 Java JPG Keras Laravel Laravel-Admin lazyload Linux list lnmp load logs Lravel Mac Markdown matplotlib md5 mix Mojave mongo MongoDB MySQL Namesilo Nginx npm numpy Nvidia Nvidia-Docker onevps OpenCV Openpose Outline parse PayPal PHP php-fpm PhpStorm PHP扩展 PIL Pillow pip PNG POST Protobuf PyCharm pyenv pymongo Python Python,人工智能,机器学习,VOC,xml Queue Redis requests save selenium SEO Shadowsock Shadowsocks ShadowsocksR simplemde Spring Boot SQLServer ssd SSH SSL证书 SSR str Sublime sudo swap Tensorflow Terminal Terminator Ubuntu urllib UTC v2ray Valet Validation Validator VienBlog virtualenvs VPN VPS Vultr Web Windows WordPress Xcode zip zmq zsh 下载图片 云主机 云服务器 人工智能 优化 优惠码 伪原创 作弊与反作弊 免费ss账号 免费提现 切片 前端 加密 协议 博客 友链 后台运行 命令 图片操作 图片转换 域名 大小写转换 安卓模拟器 安装 定时任务 定时执行 导出导入 延迟加载 慢查询 懒加载 提现 搜索引擎 搬瓦工 搭梯子 教程 数据库 文件上传 无法登录 日志 时区 时间戳 服务器 机器学习 梯子 港版支付宝 生活服务 科学上网 系统升级 索引 编辑器 自动付款 英文伪原创 计划任务 语法 远程连接 重定向 错误异常 错误提示 队列 阿里云 香港 香港手机号
亲情非友情链接