使用pipenv管理项目

pipenvPython官方推荐的包管理工具。可以说,它集成了virtualenv, pippyenv三者功能。其目的旨在集合了所有的包管理工具的长处,如: npm, yarn, composer等的优点。

它能够自动为项目创建和管理虚拟环境,从Pipfile文件添加或删除安装的包,同时生成Pipfile.lock来锁定安装包的版本和依赖信息,避免构建错误。

pipenv主要解决了如下问题:

  • 不用再单独使用pipvirtualenv, 现在它们合并在一起了
  • 不用再维护requirements.txt, 使用PipfilePipfile.lock来代替
  • 可以使用多个python版本(python2python3)
  • 在安装了pyenv的条件下,可以自动安装需要的Python版本

安装

pip install pipenv

添加shell补齐

如果使用的是bash, 可添加下面语句到.bashrc.bash_profile

eval "$(pipenv --completion)"

配置环境变量

WORKON_HOME # 设置虚拟环境的路径,如果当前目录下已经有.venv,此项设置失效
PIPENV_VENV_IN_PROJECT # 设置虚拟环境的路径为项目目录下.venv
PIPENV_DEFAULT_PYTHON_VERSION # 设置创建虚拟环境时默认的python版本

使用

初始化

pipenv --three # 调用本地或pyenv创建python3的虚拟环境
pipenv --two # 调用本地或pyenv创建python2的虚拟环境
pipenv --python <python版本> # 调用本地或pyenv创建指定python版本的虚拟环境

项目目录中创建一个名为Pipfile的文件, Pipfile的基本理念是:

  1. Pipfile 文件是 TOML 格式而不是 requirements.txt 这样的纯文本。
  2. 一个项目对应一个 Pipfile,支持开发环境与正式环境区分。默认提供 defaultdevelopment 区分。
  3. 提供版本锁支持,存为 Pipfile.lock
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]

[requires]

指定安装源

[[source]]
url = "https://mirrors.aliyun.com/pypi/simple"
verify_ssl = true
name = "aliyun"

[[source]]
url = "https://pypi.douban/simple"
verify_ssl = true
name = "douban"

[dev-packages]

[packages]
requests = {version="*", index="douban"}
maya = {version="*", index="aliyun"}
records = "*"

安装包

pipenv install <包名> 
pipenv install <包名> --dev # 安装包至dev-packages与packages
pipenv install <包名>==<版本> # 安装指定版本包
  • install命令没有传递参数指定安装包时,所有[packages]里指定的包都会被安装,如果虚拟环境不存在的话,也会自动创建
  • 项目目录下如果有requirements.txt文件,那么会自动从requirements.txt文件导入安装包信息并创建一个Pipfile文件

删除包

pip uninstall <包名>
pip clean # 清理不在Pipfile.lock,不被依赖多余的包

激活虚拟环境

pipenv shell
pipenv run <虚拟环境要执行的命令>
  • 如果项目根目录下有.env文件,激活虚拟环境会自动加载这个文件,可以通过.env设置环境变量。
  • 可以配合autoenv 进入目录自动激活虚拟环境

其它

pipenv --venv # 获取虚拟环境目录路径
pipenv --where # 获取项目目录路径
pipenv --update # 更新pipenv和pip到最新版本
pipenv --rm # 删除虚拟环境
pipenv graph # 获取已安装包的依赖图
pipenv lock -r # 导出生成requirements.txt文件
pipenv update # 更新所有包
pipenv update <包名> # 更新指定包

参考:

0%