pipenv环境工具

熊大2022年6月27日大约 7 分钟

pipenv概述

pipenv是一个非常方便的虚拟环境的工具,它可以创建不同python版本和不同包版本的虚拟环境。 pipenv顾名思义内部结合并使用了pip的功能和virtualenv的功能,并修复了很多功能上的缺陷。

pipenv特点

  1. 首次在项目中运行pipenv命令会在项目中创建Pipfile文件,否则会修改Pipfile文件。
  2. 如果运行过install、update等命令的话,还会创建一个Pipfile.lock文件。
  3. 如果项目中有requirements.txt文件,pipenv会在安装的时候自动导入。
  4. 如果有Pipfile.lock文件存在,安装的包版本以次为准;其次才是Pipfile文件

安装pipenv

# 安装
pip install pipenv
# 更换全局源(这步感觉没效果)
setx /m PIPENV_PYPI_MIRROR https://pypi.douban.com/simple

请使用管理员权限执行安装

pipenv环境管理

# 创建环境
pipenv install
pipenv --python 3.8  # 指定python版本来创建虚拟环境
pipenv install --python 2.7.14  # 使用python指定版本创建虚拟环境
pipenv install –dev  # 安装Pipfile中 [default] 和 [devlop] 中的包
mkdir .venv && pipenv install  # 创建虚拟环境并安装在项目根目录.venv中


# 查看环境
pipenv --where  # 查看项目根路径
pipenv --venv  # 查看环境根路径
pipenv --py  # 查看python解释器路径
pipenv shell  # 进入虚拟环境的Shell

# 在虚拟环境中执行命令
pipenv run python --version

# 删除虚拟环境
pipenv --rm

Pipfile.lock

任何情况下都不应该手动修改Pipfile.lock文件。
提交项目时,请将Pipfile和Pipfile.lock文件一并提交。

指定python版本

如果不指定python版本则使用系统默认版本。
如果指定的Python版本则必须是系统已经安装的、可以在环境变量中搜索到的版本号,如果指定未安装的版本,会提示错误。
但是如果你同时安装了pyenv的话,pipenv会自动发现pyenv,然后直接询问你是否要安装。

pipenv包管理



# 安装包
pipenv install requests  # 安装指定包最新版,并更新到Pipfile和Pipfile.lock中
pipenv install requests==2.13.0  # 安装指定包指定版本,并更新到Pipfile和Pipfile.lock中
pipenv install django -i https://pypi.tuna.tsinghua.edu.cn/simple/  # 第一次创建新环境时建议指定源
pipenv install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/  # 通过requirements.txt文件内容安装包


# 查看包
pipenv graph  # 查看已经安装的包
pipenv check  # 检查包漏洞

# 卸载包
pipenv uninstall requests  # 卸载指定包,并从Pipfile和Pipfile.lock中删除
pipenv uninstall --all  # 卸载全部包,并从Pipfile和Pipfile.lock中删除
pipenv uninstall --all-dev  # 卸载开发包,并从Pipfile和Pipfile.lock中删除

# 升级包
pipenv update --outdated  # 查看可升级的包
pipenv update  # 升级所有包
pipenv update django  # 升级指定的包
# 注意:升级的版本会受到Pipfile内容规定的版本限制,如果想安装超出限制的版本,直接用install安装指定版本


# 导出为requirements.txt
pipenv lock -r > requirements.txt
pipenv lock -r --dev > requirements.txt  # 只导出开发用的包

# 生成一个锁文件
pipenv lock

提示

在Pipfile文件中非常不建议把包版本写死,如:django = "==3.2.13"
建议的写法:
django = "~=3.2.13" (最低版本是3.2.13并且自动升级为兼容该版本的最新版)
requests = ">=2.1.2,<=2.99.99"(最低版本是2.1.2并且自动升级为2的最新版)
Pipfile文件格式:点击查看open in new window ``

pyenv工具

概述

pyenv工具不是必选项,如果多个项目用的不同的python版本,那么pyenv可以很方便解决python版本问题。

当你安装好了pyenv后,pipenv会自动集成和调用来部署不同的python版本环境。

pyenv安装

提示

总结一些python版本源的地址:
淘宝源:https://npm.taobao.org/mirrors/python/
华为源:https://mirrors.huaweicloud.com/python/
搜狐源:http://mirrors.sohu.com/python/

pyenv的使用

pyenv version  # 查看当前版本
pyenv versions  # 查看已经安装的版本
pyenv install --list  # 查看所有可安装的版本
pyenv install 3.6.8  # 安装某版本python
pyenv install 3.7.9-amd64  # 安装某版本python
pyenv rehash  # 安装新版本后rehash更新一下数据库
pyenv global 3.6.8-amd64  # 设置某版本为全局使用
pyenv global 3.6.5 2.7.14  # 指定多个全局版本, 3版本优先
pyenv global  # 查看全局python的版本

pyenv uninstall 3.6.8  # 删除某版本
pyenv uninstall --all  # 删除所有版本

# 实际上当你切换版本后, 相应的pip和包仓库都是会自动切换过去的

virtualenv工具

概述

如果你在使用pipenv,那么这里可以仅作一个了解就可以。对,还是很建议使用pipenv。

virtualenv是一个配置和管理python的虚拟环境的工具,在同一台电脑中有不同的项目,然后项目之间的第三方包版本又不一样,这个时候就需要用到虚拟环境。

当然有更方便的方案可以替代,建议使用pipenv来代替此工作。

安装命令

pip install virtualenv

如何使用

i:

virtualenv testvir 在当前目录下创建一个虚拟环境目录testvir

cd testvir\Scripts

activate.bat 进入虚拟环境

pip list 查看当前虚拟环境中安装的哪些库

deactivate.bat 退出虚拟环境

使用虚拟环境时需要我们知道虚拟环境的目录,比较麻烦,这时需要使用另一款库virtualenvwrapper-win

安装virtualenvwrapper

windows环境下的安装:pip install virtualenvwrapper-win

Linux环境下的安装:pip isntall virtualenvwrapper

使用virtualenvwrapper

mkvirtualenv testvir2 使用默认的python解析器创建虚拟环境完成后会自动进入该虚拟环境

会将所有的虚拟环境文件夹放到同一个目录下,进行统一管理。

如果本机有多个python版本,需要用 -p python解释器路径 指明python版本。

deactivate 退出目前的虚拟环境

workon 查看所有虚拟环境

workon testvir2 进入testvir2虚拟环境

pip list 查看当前虚拟环境中有哪些开发包

pip install requests 在当前虚拟环境下安装requests库

在pycharm中使用虚拟环境

新建django项目时,点击Existing interpreter选项,添加某虚拟环境的python.exe执行文件C:\Users\xiong\Envs\testvir2\Scripts\python.exe

排坑指南

警告

ERROR:: --system is intended to be used for pre-existing Pipfile installation, not installation of specific packages. Aborting.

报错原因:在之前的创建过程中卡住,导致虚拟环境创建失败,没有正确退出。

解决方案:先删除(--rm)虚拟环境再重新install


警告

'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

报错原因:requirements.txt文件编码有问题 解决方案:复制内容,删除该文件重新新建