python pipenv使用教程
pipenv概述
pipenv是一个非常方便的虚拟环境的工具,它可以创建不同python版本和不同包版本的虚拟环境。 pipenv顾名思义内部结合并使用了pip的功能和virtualenv的功能,并修复了很多功能上的缺陷。
pipenv特点
- 首次在项目中运行pipenv命令会在项目中创建Pipfile文件,否则会修改Pipfile文件。
- 如果运行过install、update等命令的话,还会创建一个Pipfile.lock文件。
- 如果项目中有requirements.txt文件,pipenv会在安装的时候自动导入。
- 如果有Pipfile.lock文件存在,安装的包版本以次为准;其次才是Pipfile文件
安装pipenv
# 安装
pip install pipenv
# 更换全局源(这步感觉没效果)
setx /m PIPENV_PYPI_MIRROR https://pypi.tuna.tsinghua.edu.cn/simple/
请使用管理员权限执行安装
pipenv环境管理
# 创建环境
pipenv install
pipenv install --skip-lock # 跳过锁文件进行安装
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
# 清理锁文件中所有依赖项,并更新锁文件重新生成新的依赖项。(更新锁文件)
pipenv lock --clear
Pipfile.lock
任何情况下都不应该手动修改Pipfile.lock文件。
提交项目时,请将Pipfile和Pipfile.lock文件一并提交。
指定python版本
如果不指定python版本则使用系统默认版本。
如果指定的Python版本则必须是系统已经安装的、可以在环境变量中搜索到的版本号,如果指定未安装的版本,会提示错误。
但是如果你同时安装了pyenv的话,pipenv会自动发现pyenv,然后直接询问你是否要安装。
在修改Pipfile文件中的url后,需要更新锁文件:
pipenv lock
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 requirements > 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文件格式:点击查看 ``
pipenv最佳实践
mkdir .venv
pipenv install --python 3.12 --skip-lock
pipenv shell
pip install -r requirements.txt
pipfile文件中,只需要一个主要框架的依赖包即可,其他包放到requirements.txt中。我们主要是使用pipenv创建虚拟环境,因为pipenv可以在依赖包数量多的情况下,安装依赖包速度会非常慢。
pipenv脚本
# ...
[scripts]
test = "python -m unittest discover -s ./tests"
dev = "python manage.py runserver 0.0.0.0:8000"
使用脚本:
pipenv run test
pyenv工具
概述
pyenv工具不是必选项,如果多个项目用的不同的python版本,那么pyenv可以很方便解决python版本问题。
当你安装好了pyenv后,pipenv会自动集成和调用来部署不同的python版本环境。
pyenv安装
# 安装
pip install pyenv-win --target $HOME\\.pyenv
# 永久添加系统变量PYENV为 C:\Users\Administrator\.pyenv\pyenv-win
setx -m PYENV %USERPROFILE%\.pyenv\pyenv-win
# 追加用户变量Path
setx PATH "$env:path;%PYENV%\bin;%PYENV%\shims"
# 永久添加系统变量PYTHON_BUILD_MIRROR_URL (更换镜像源为华为镜像源)
setx -m PYTHON_BUILD_MIRROR_URL https://mirrors.huaweicloud.com/python/
# 也可以直接在安装脚本修改镜像源 %USERPROFILE%\.pyenv\pyenv-win\libexec\libs\pyenv-install-lib.vbs
# 更新本地版本缓存文件(.versions_cache.xml)
pyenv update
# 替换本地缓存文件.versions_cache.xml关键字,不然下载的webinstall安装的非常慢
# 用搜索替换功能,将"-webinstall"删掉,将webInstall="true"改为webInstall="false"
Get-Content $env:USERPROFILE/.pyenv/pyenv-win/.versions_cache.xml | Foreach-Object {$_.replace( "-webinstall","").replace('webInstall="true"','webInstall="false"')} | Set-Content $env:USERPROFILE/.pyenv/pyenv-win/.versions_cache_new.xml
Remove-Item $env:USERPROFILE/.pyenv/pyenv-win/.versions_cache.xml
rename-Item $env:USERPROFILE/.pyenv/pyenv-win/.versions_cache_new.xml -NewName '.versions_cache.xml'
# 测试是否安装成功
pyenv --version
提示:如果set后面不加x,那么只是当前session起作用,新开窗口不管用!。
提示:setx -m:-m代表全局系统变量,不带-m代表当前用户变量
警告:请注意普通权限的PowerShell是不可以执行系统变量Path内的脚本的,会出现无法识别的报错。有这方面问题的添加到用户变量的Path中即可。
# 安装依赖软件
# https://github.com/pyenv/pyenv/wiki#suggested-build-environment
sudo apt install aptitude
sudo aptitude install tk-dev
sudo apt-get update; sudo apt-get install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
# 安装
mkdir ~/.pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
cd ~/.pyenv && src/configure && make -C src
# 添加环境变量
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
# 更换python安装源
echo 'export PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM=1' >> ~/.bashrc
echo 'export PYTHON_BUILD_MIRROR_URL=https://npm.taobao.org/mirrors/python/' >> ~/.bashrc
提示
安装方法二:curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
安装完还需要上部的添加环境变量
提示
总结一些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文件编码有问题 解决方案:复制内容,删除该文件重新新建