pyenv 和 pipenv 和 direnv 管理Python环境

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_1290259791/article/details/85092867

管理多个相互独立的 Python 虚拟开发环境

最终实现

  • pyenv:同一台电脑管理多个 Python 版本
  • pipenv:每一个项目建立项目隔绝的虚拟环境
  • direnv:进入项目自动激活虚拟环境

Pyenv

pyenv 可以改变全局的 Python 版本,安装多个版本的 Python, 设置目录级别的 Python 版本。

安装 Pyenv

brew install pyenv
或 pip install pyenv

常用命令

  • pyenv install -list 可安装版本
  • pyenv install <version> 安装对应版本
  • pyenv uninstall <version> 卸载指定版本
  • pyenv versions 显示当前使用的版本
  • pyenv which python 显示当前 Python 安装路径
  • pyenv global <version> 设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。
  • pyenv local <version> 设置 Python 局部版本,通过将版本号写入当前目录下的 .python-version 文件的方式。
  • pyenv shell <version> 设置面向 shell 的 Python 版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。优先级最高。
  • pyenv shell --unset 可以用于取消当前 shell 设定的版本。
  • pyenv rehash 创建垫片路径(为所有已安装的可执行文件创建 shims,如:~/.pyenv/versions//bin/,因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令)

Python 优先级
shell > local > global

安装 Python

我这里出现了错误,解决方式在最后

➜  ~ pyenv install 3.7.0
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.0.tar.xz...
-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
Installing Python-3.7.0...
python-build: use readline from homebrew
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-3.7.0 to /Users/hubo/.pyenv/versions/3.7.0

没有将 sqlite3 编译完成,这个可以通过 brew install sqlite 安装。

pipenv

综合了 virtualenv , pip 和 pyenv 三者的功能。能够自动为项目创建和管理虚拟环境。
pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包

  • Pipfile:在使用pipenv添加或删除包时,自动维护 Pipfile 文件。
  • Pipfile.lock:锁定安装包的版本和依赖信息,避免构建错误。

安装 Pipenv

brew install pipenv
或 pip install pipenv

常用命令

  • pipenv install 安装包
  • pipenv shell 激活当前项目的虚拟环境
  • pipenv install pytest --dev 安装开发依赖包
  • pipenv graph 图形显示包依赖关系
  • pipenv lock 生成 lockfile
  • pipenv lock -r 生成requirements.txt文件
  • pipenv lock -r -d 生成dev-packages的requirements.txt文件
  • pipenv uninstall --all 删除所有安装包
  • pipenv install --three # 使用python3创建
    pipenv install --two # 使用python2创建
    pipenv --python 路径 # 自定义python路径
    pipenv --python 3 # 指定python版本
    pipenv --python 3.6
    pipenv --python 2.7.14
    pipenv install -r path/to/requirements.txt # 安装一个列表
    pipenv --venv # 当前虚拟环境目录
    pipenv --py # 查看当前虚拟环境的python地址
    pipenv --where # 本地项目绝对路径
    pipenv --upgrade # 更新pipenv&pip到最新版本
    pipenv --envs # 输出环境变量信息
    pipenv --rm # 删除当前虚拟环境
    pipenv --bare # 精简输出
    pipenv claen # 删除未在Pipfile.lock中指定的安装包
    pipenv update pkg # 更新包,不加pkg,更新所有
    pipenv uninstall --all # 卸载虚拟环境所有包

为项目建立虚拟环境

.bashrcbash_profile 下添加下面命令,pipenv会在当前目录下创建.venv的目录,以后都会把模块装到这个.venv下

export PIPENV_VENV_IN_PROJECT=1 # 自动激活虚拟环境

指定 Python 版本信息

创建虚拟环境的时候,我们可以指定使用的python版本信息,类似pyenv。
pipenv会自动扫描系统寻找合适的版本信息,如果找不到的话,同时又安装了pyenv, 它会自动调用pyenv下载对应的版本的python

$ pipenv --python 3
$ pipenv --python 3.6
$ pipenv --python 2.7.14
➜  demo1 pipenv --python 3.6.0
Warning: Python 3.6.0 was not found on your system...
Would you like us to install CPython 3.6.0 with pyenv? [Y/n]: y
Installing CPython 3.6.0 with pyenv (this may take a few minutes)...
⠋

dirnev

下载

brew install direnv

配置变量

# 在~/.zshrc文件末尾追加
$ echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc

虚拟环境配置

官网文档

在虚拟环境目录下
$ pipenv --three
$ echo layout_pipenv >> .envrc

错误

pyenv install

zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1

问题是缺少zlib

brew install zlib
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?

检查一下 zlib 或 sqlite3 是不是已经安装,但即使已经通过 homebrew 安装了以上 Package,依然会出现这些错误。这是因为 pyenv 无法找到 homebrew 安装的库的路径,需要手动指定:

export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/sqlite/lib"

export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/sqlite/include"

猜你喜欢

转载自blog.csdn.net/qq_1290259791/article/details/85092867
今日推荐