【Python】虚拟环境管理


前言

  在实际项目开发中,我们通常会根据自己的需求去下载各种相应的框架库,如Scrapy、Beautiful Soup等,但是可能每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要我们根据需求不断的更新或卸载相应的库。直接怼我们的Python环境操作会让我们的开发环境和项目造成很多不必要的麻烦,管理也相当混乱。


pyenv(python版本管理器)

我们经常在开发时会需要用到多个python版本,为了解决版本问题,比较常见的做法是修改环境变量来切换版本,但是修改环境变量终究比较麻烦。另外,我们在安装新的python版本时也会小心翼翼,避免影响到系统自带的python版本。这个问题都可以通过pyenv来解决。
pyenv可以在系统中安装多个python版本,并且不影响到系统自带的python,而且通过pyenv我们可以快速的在多个python版本之间来回切换。

参考 pyenv的安装与简单使用

# 列出所有可以使用的版本
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介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值