pipenv 简单使用记录

5 minute

关于 pipenv

pipenv 集成了 pip,virtualenv 两者的功能,且完善了两者的一些缺陷。

安装 pipenv

1pip install pipenv -U

创建虚拟环境

初次创建环境可以使用以下类似命令:

1pipenv install --python C:/Users/akyna/AppData/Local/Programs/Python/Python37/python.exe --pypi-mirror https://pypi.tuna.tsinghua.edu.cn/simple

--python 是可选的,可以指定 python 版本,参数为 python 解释器的绝对路径,如果不指定,默认使用当前系统的 python。

--pypi-mirror 是可选的,可以指定镜像,加速下载。

创建好后,在当前目录下将会生成 Pipfile 文件,在 ~\.virtualenvs 下生成虚拟环境目录(存放 python 解释器和依赖)。

如果目录中已经存在 Pipfile 或者 requirements.txt,pipenv会自动检测这两个文件并将对应依赖进行安装。

查看虚拟环境目录位置:

1pipenv --venv

激活虚拟环境

1pipenv shell # 激活虚拟环境
2python -V

如果激活了虚拟环境,在当前 shell 下,使用的 python 或者 pip 都是虚拟环境中的 python 和 pip。

配置 Pip 并安装依赖

配置镜像源为清华源:

1vim Pipfile
2
3[[source]]
4url = "https://pypi.tuna.tsinghua.edu.cn/simple"

以后所有依赖的安装都不需要指定 --pypi-mirror 了。

安装依赖:(建议关闭代理,如果有的话)

1pipenv install {pkg} # 如果激活了虚拟环境,可以使用pip
2# pipenv install -r requirements.txt

安装完依赖后,将会生成 Pipfile.lock 文件,以后初始化虚拟环境都只需要运行 pipenv install 即可完成所有依赖的安装。

当然,也可以通过生成 requirements.txt 的方式进行,下次初始化虚拟环境时,pipenv 也会自动识别目录下的 requirements.txt

1pipenv requirements > requirements.txt

通过 pipenv graph 可以查看目前安装的库及其依赖。

以后新安装任何依赖,如果处在虚拟环境下,都可以直接运行 pip install {pkg} 完成包的安装,但是如果这样安装,新的依赖信息并不会被添加到 pipfile 中,也就不利于之后重新初始化环境和生成正确的 requirements.txt 。因此,建议每次安装新的依赖包时都使用 pipenv install {pkg} ,这样新的依赖信息会被写入 pipfilepipfile.lock 中。

关于 Pipfile 和 Pipfile.lock

这两个文件是相互补充的关系。

首先,对于 pipfile, 里面一般记录了以下类似内容:

  • Source: 记录包的下载地址源
  • Dev-packages : 记录当我们开发时所需要使用的包的相关信息
  • Packages: 用于记录我们程序运行所依赖的包
  • Requires: 指定了使用的 python 的版本

然后,对于 Pipfile.lock 文件,这是一个 json 类型的文件,在这个文件里面,它记录了:

  • 开发所用的包和其详细的版本
  • 记录了源代码的包的下载地址,其中的 hash 值用于包的验证

使用 pipenv lock 可以更新 Pipfile.lock 文件,lock 操作将让安装依赖的时间变长,可以通过 --skip-lock 来跳过 lock 操作。

对于 Dev-packages 字段,使用 pipenv install 创建虚拟环境时需要添加 --dev 才会安装它对应的包(默认只安装 Packages 下的包)。

安装依赖时,添加 --dev 将会把包依赖记录到 Dev-packages 下而不是 Packages 下。

更新包

pipenv update 想当于运行 pipenv lock && pipenv sync:

  • lock: Generates Pipfile.lock.
  • sync: Installs all packages specified in Pipfile.lock.
1pipenv update --outdated  # 查看所有需要更新的依赖项
2pipenv update  # 更新所有包的依赖项
3pipenv update <包名>  # 更新指定的包的依赖项

卸载包

1pipenv uninstall XXX  # 卸载XXX模块并从Pipfile中移除
2pipenv uninstall --all  # 卸载全部包并从Pipfile中移除
3pipenv uninstall --all-dev  # 卸载全部开发包并从Pipfile中移除

退出虚拟环境

1exit  # 退出当前虚拟环境
2
3python -V # 将变为系统的python版本

删除虚拟环境

1pipenv --rm  # 删除虚拟环境 

在~/.virtualenvs中的虚拟环境将被删除。

运行文件

方式一:

1pipenv run python xxx.py

方式二:在激活环境中运行

1# 进入激活环境
2pipenv shell
3# 运行文件
4python xxx.py