Skip to content

Python项目虚拟环境工具介绍

Published: at 00:00

前言

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

Pyenv

简介

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

安装

$ brew install pyenv

初始化

往自己的 shell 配置文件(我用的是 ZSH,因此修改 ~/.zshrc 这个文件)加入:

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

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

使用

查看当前的所有版本信息
$ pyenv versions
  system
  3.9.18
* anaconda3-2023.09-0 (set by /Users/yuhongzhao/.python-version)
查看所有可安装的版本
$ pyenv install --list
Available 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.1
python-build: use openssl@3 from homebrew
python-build: use readline from homebrew
Downloading 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 homebrew
python-build: use ncurses from homebrew
python-build: use zlib from xcode sdk
...
...
...
此处省略一万行
查看安装的版本对应目录
ls -alh ~/.pyenv/versions/
指定版本反安装
$ pyenv uninstall 3.12.1
pyenv: remove /Users/yuhongzhao/.pyenv/versions/3.12.1? [y|N] y
pyenv: 3.12.1 uninstalled
查看当前使用的版本
$ python -V
Python 3.11.5
选择指定使用哪个版本

有3个子命令可以指定使用哪个版本,分别是 pyenv shell, pyenv local, pyenv global。这3个子命令可以指定不同的版本,再加上系统默认的版本,就有可能同时存在4个不同的版本,那么这个时候会优先按 shell -> local -> global -> system 这个顺序来决定用哪个版本。比如设置了 local 的版本,就不会用 global 和 system 的版本。

指定 global 版本
# 设置全局的版本
$ 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 虚拟环境和包管理的工具。

安装

$ brew install pipenv

使用

创建项目目录
$ mkdir -p ./yhz-me-pipenv-demo
# 后续的所有虚拟环境的操作都要进入到项目目录中执行
$ cd ./yhz-me-pipenv-demo
为项目设置 Python 版本
$ pyenv local 3.9.18
为项目安装虚拟环境
$ pipenv install --python 3.9.18

执行 install 时,如果当前项目有 Pipfile 和 Pipfile.lock 这两个文件,就从按这两个文件里的指定的包进行安装。如果没有,则会新建出来那两个文件。

修改源 Pip 源

修改 Pipfile 这个文件,找到对应的 Source 配置,修改成如下:

[[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 举例。

$ pipenv uninstall peewee
移除虚拟环境
# 如果虚拟环境被搞坏了,可以移除了重建
$ 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 项目创建和维护一个虚拟环境,希望对大家有所帮助。当然,还有更多具体的使用方法,大家可以上网去查阅。