目录
前言
在实际项目开发中,我们通常会根据自己的需求去下载各种相应的框架库,如Scrapy、Beautiful Soup等,但是可能每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要我们根据需求不断的更新或卸载相应的库。直接怼我们的Python环境操作会让我们的开发环境和项目造成很多不必要的麻烦,管理也相当混乱。
pyenv(python版本管理器)
我们经常在开发时会需要用到多个python版本,为了解决版本问题,比较常见的做法是修改环境变量来切换版本,但是修改环境变量终究比较麻烦。另外,我们在安装新的python版本时也会小心翼翼,避免影响到系统自带的python版本。这个问题都可以通过pyenv来解决。
pyenv可以在系统中安装多个python版本,并且不影响到系统自带的python,而且通过pyenv我们可以快速的在多个python版本之间来回切换。
# 列出所有可以使用的版本
pyenv install --list
# 安装
pyenv install 3.8.0
# 直接查看当前对应版本
pyenv version
# 列出所有已安装的版本,当前使用版本带 "*"
pyenv versions
# 设置全局版本
pyenv global <version>
# 设置当前版本
pyenv local <version>
# 验证设置效果
python -V
pipenv(python包管理器)
pipenv是Python官方推荐的包管理工具。 它综合了 virtualenv , pip 和 pyenv 三者的功能。能够自动为项目创建和管理虚拟环境。如果你使用过requests库,就一定会爱上这个库,因为是同一个大神出品。 pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包,并且在使用pipenv添加或删除包时,自动维护 Pipfile 文件,同时生成 Pipfile.lock 来锁定安装包的版本和依赖信息,避免构建错误。相比pip需要手动维护requirements.txt 中的安装包和版本,具有很大的进步。
安装与基本使用
安装
# pip 安装
pip3 install pipenv # 全局安装,如果只想在当前用户模式下安装,可添加参数:--user
# 如需更新可使用
pip3 install --user --upgrade pipenv
注: 如果在使用当前用户模式下安装pipenv后在shell中提示不可用,则需要把用户库的目录“C:\Users\XXX\AppData\Roaming\Python\Python37\Scripts”添加到你的PATH【系统环境路径】中,然后重启电脑,环境变量生效后即可使用。
创建虚拟环境
mkdir demo
cd demo
#使用本地默认版本的python
pipenv install
# 使用当前系统中的Python3 创建环境
pipenv --three
# 指定版本创建环境
pipenv --python 3.6
注: 1)创建环境时应使用系统中已经安装的、能够在环境变量中搜索到的Python 版本,否则会报错。
2)每次创建环境都会在当前目录下生成一个名为Pipfile文件,用来记录刚创建的环境信息,如果当前目录下之前存在该文件,会将其覆盖。
3)在使用指定版本创建环境的时候,版本号与参数 --python 之间有个空格
安装完成之后会在你的项目目录自动生成 Pipfile 和 Pipfile.lock 两个文件,他们主要是用来管理包的
# Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
requests = "*"
[dev-packages]
[requires]
python_version = "3.8"
# Pipfile.lock
{
省略部分信息
"default": {
"requests": {
"hashes": [
"sha256:27973dd4a...",
"sha256:c210084e3..."
],
"index": "pypi",
"version": "==2.25.1"
},
省略部分信息
},
"develop": {}
}
Pipfile 列出了 安装包的信息和 Python 版本信息,该文件中还有一个 dev-packages 的信息,安装时如果指定 -dev 参数,那么就会记录在 dev-packages 下面。而 Pipfile.lock 则保存了库的哈希值,这是确保生产环境和开发环境库信息一致的关键。
管理虚拟环境
进入虚拟环境
pipenv shell
退出虚拟环境
exit
删除虚拟环境
pipenv --rm
安装与卸载模块
安装
pipenv install flask==0.12.1 #指定版本
pipenv install numpy #不指定版本
pipenv install pytest --dev #只安装在开发环境才使用的包
卸载
# 删除指定库
pipenv uninstall numpy
# 删除所有库
pipenv uninstall --all
# 卸载全部开发包并从Pipfile中移除
pipenv uninstall --all-dev
环境迁移
迁移至生产环境
如果在开发环境已经完成开发,如何构建生产环境的东东呢?这时候就要使用Pipfile.lock了,运行以下命令,把当前环境的模块lock住, 它会更新Pipfile.lock文件,该文件是用于生产环境的,你永远不应该编辑它。
pipenv lock
然后只需要把代码和Pipfile.lock
放到生产环境,运行下面的代码,就可以创建和开发环境一样的环境咯,Pipfile.lock里记录了所有包和子依赖包的确切版本,因此是确定构建
pipenv install --ignore-pipfile
迁移开发环境
如果要在另一个开发环境做开发,则将代码和Pipfile
复制过去,运行以下命令
pipenv install --dev
由于Pipfile里面没有所有子依赖包或者确定的版本,因此该安装可能会更新未指定模块的版本号,这不仅不是问题,还解决了一些其他问题,我在这里做一下解释:
假如该命令更新了一些依赖包的版本,由于我肯定还会在新环境做单元测试或者功能测试,因此我可以确保这些包的版本更新是不会影响软件功能的;然后我会pipenv lock并把它发布到生产环境,因此我可以确定生产环境也是不会有问题的。这样一来,我既可以保证生产环境和开发环境的一致性,又可以不用管理众多依赖包的版本,完美的解决方案!
兼容requirements.txt 文件
通过requirements.txt安装包
使用pipenv install会自动检测当前目录下的requirments.txt, 并生成Pipfile, 我也可以再对生成的Pipfile做修改。
此外以下命令也有同样效果, 可以指定具体文件名:
pipenv install -r requirements.txt
如果我有一个开发环境的requirent-dev.txt, 可以用以下命令加入到Pipfile:
pipenv install -r dev-requirements.txt --dev
生成requirements.txt 文件
# 将Pipfile和Pipfile.lock文件里面的包导出为requirements.txt文件
pipenv lock -r > requirements.txt
# 将Pipfile和Pipfile.lock文件里面的开发包导出为requirements.txt文件
pipenv lock -r --dev > requirements.txt
Python 文件的运行
# 方式一: pipenv run python xxx.py
pipenv run python xxx.py
# 方式二:在激活环境中运行
# 进入激活环境
pipenv shell
# 运行文件
python xxx.py
高级用法
含义 | 命令 |
---|---|
检查库的依赖关系 | pipenv graph |
获取虚拟环境路径 | pipenv --venv |
获取本地工程路径 | pipenv --where |
显示Python解释器信息 | pipenv --py |
查看库的具体信息 | pipenv open xxx |
查看所有需要更新的依赖项 | pipenv update --outdated |
更新所有包的依赖项 | pipenv update |
更新指定的包的依赖项 | pipenv update <包名> |
检查库的安全性 | pipenv check |
安装慢问题解决
Python 安装第三方库,pip install 安装慢、pipenv安装慢的问题解决
参考文献
Pipenv GitHub官网:https://github.com/pypa/pipenv
Pipenv——最好用的python虚拟环境和包管理工具
拥抱pipenv
Python新利器之pipenv
python利器——pipenv和pyenv介绍