Python项目虚拟环境工具介绍

168 阅读2分钟

前言

我们在用 Python 进行多个项目开发的很多时候,每个项目用的 Python 版本和依赖的包及包版本都可能不一样。为了避免多个项目之间出现版本或包冲突的情况,就很有必要对项目的 Python 环境进行隔离。有很多工具其实也能做到,比如以往一直在用的 VirtualEnv,这里介绍另外两个个人觉得比较好用的工具:Pyenv 和 Pipenv。

Pyenv

简介

简单来说,类似于 Java 的 jenv 和 Ruby 的 rbenv, Pyenv 是一个可以安装和管理多个 Python 版本的工具。

安装

$ brew install pyenv```  
  
#### 初始化  
往自己的 shell 配置文件(我用的是 ZSH,因此修改 ~/.zshrc 这个文件)加入:  
```bash  
export PYENV_ROOT="$HOME/.pyenv"[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"eval "$(pyenv init -)"  
  

修改完 source 一下,或者重启 shell。

使用

查看当前的所有版本信息
$ pyenv versionssystem  
  3.9.18* anaconda3-2023.09-0 (set by /Users/yuhongzhao/.python-version)  
查看所有可安装的版本
$ pyenv install --listAvailable versions:  2.1.3  
  2.2.3  2.3.7  2.4.0  2.4.1  2.4.2  2.4.3  2.4.4  ...  ...  ...  此处省略一万行  
指定版本安装
$ pyenv install 3.12.1python-build: use openssl@3 from homebrewpython-build: use readline from homebrewDownloading Python-3.12.1.tar.xz...-> https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tar.xz  
Installing Python-3.12.1...python-build: use readline from homebrewpython-build: use ncurses from homebrewpython-build: use zlib from xcode sdk...  
...  
...  
此处省略一万行  
查看安装的版本对应目录
ls -alh ~/.pyenv/versions/```  
  
##### 指定版本反安装  
```bash  
$ pyenv uninstall 3.12.1                                                       pyenv: remove /Users/yuhongzhao/.pyenv/versions/3.12.1? [y|N] y  
pyenv: 3.12.1 uninstalled```  
  
##### 查看当前使用的版本  
```bash  
$ python -V     Python 3.11.5```  
  
##### 选择指定使用哪个版本  
有3个子命令可以指定使用哪个版本,分别是 pyenv shell, pyenv local, pyenv global。这3个子命令可以指定不同的版本,再加上系统默认的版本,就有可能同时存在4个不同的版本,那么这个时候会优先按 shell -> local -> global -> system 这个顺序来决定用哪个版本。比如设置了 local 的版本,就不会用 global 和 system 的版本。  
  
###### 指定 global 版本  
  
```bash  
# 设置全局的版本  
$ pyenv global anaconda3-2023.09-0  
  
# 查看全局的版本  
$ pyenv global  
  
# 设置全局版本会把版本信息记录在这个文件  
$ cat ~/.pyenv/version     anaconda3-2023.09-0  
指定 local 版本

一般 Local 版本,是为项目而定的,

# 设置本地的版本  
$ pyenv local 3.9.18  
  
# 查看本地的版本  
$ pyenv local  
  
# 设置本地版本会把版本信息记录在这个文件  
$ cat ./.python-version 3.9.18  
指定 shell 版本
# 设置shell的版本  
$ pyenv shell 3.9.18   
# 查看 shell 的版本  
$ pyenv shell  
  
# 设置 shell 版本会把版本信息记录在这个环境变量里:  
$ echo $PYENV_VERSION 3.9.18  
查看当前使用的 Python 位置
$ pyenv which python```  
  
  
### Pipenv  
#### 简介  
   简单来说,就是类似于 VirtualEnv,为 Python 项目管理 Python 虚拟环境和包管理的工具。  
  
#### 安装  
```bash  
$ brew install pipenv```  
  
#### 使用  
##### 创建项目目录  
```bash  
$ mkdir -p ./yhz-me-pipenv-demo# 后续的所有虚拟环境的操作都要进入到项目目录中执行  
$ cd ./yhz-me-pipenv-demo```  
  
##### 为项目设置 Python 版本  
```bash  
$ pyenv local 3.9.18```  
  
##### 为项目安装虚拟环境  
```bash  
$ pipenv install --python 3.9.18```  
执行 install 时,如果当前项目有 Pipfile 和 Pipfile.lock 这两个文件,就从按这两个文件里的指定的包进行安装。如果没有,则会新建出来那两个文件。  
  
##### 修改源 Pip 源  
修改 Pipfile 这个文件,找到对应的 Source 配置,修改成如下:  
```toml  
[[source]]  
url = "https://pypi.tuna.tsinghua.edu.cn/simple"  
verify_ssl = true  
name = "pypi.tuna"  
激活虚拟环境
# 相当于新开一个 shell$ pipenv shell  
指定安装Python包

这里以安装 peewee 举例。

$ pipenv install peewee# 指定包版本安装  
$ pipenv install peewee==2.10.2```  
  
##### 指定反安装Python包  
这里以反安装 peewee 举例。  
```bash  
$ pipenv uninstall peewee```  
  
##### 移除虚拟环境  
```bash  
# 如果虚拟环境被搞坏了,可以移除了重建  
$ pipenv --rm  
查看所有的依赖包及版本信息
$ pipenv graph arrow==1.3.0  
├── python-dateutil [required: >=2.7.0, installed: 2.8.2]  
│   └── six [required: >=1.5, installed: 1.16.0]  
└── types-python-dateutil [required: >=2.8.10, installed: 2.8.19.20240106]  
peewee==2.10.2  
(yhz-me-pipenv-demo) 

总结

本文记录了Pyenv 和 Pipenv 这两个工具的简单使用,就能为 Python 项目创建和维护一个虚拟环境,希望对大家有所帮助。当然,还有更多具体的使用方法,大家可以上网去查阅。