【Python基础学习】—pipenv的使用教程

【Python基础学习】—pipenv的使用教程

  • 前言
    • Python虚拟环境管理工具的发展
    • pipenv的优势
  • pipenv使用教程
    • pipenv命令详解
    • pipfile文件详解
    • 最佳实践推荐
  • 参考链接

前言

关于Python虚拟环境管理,很多人一开始不以为意,把编程时所有依赖的库全安装在一起,要用的时候直接导入,看似非常方便,但是会造成很多隐患:

  • 当电脑/服务器里面的项目越来越大,更新迭代次数多了,会造成很多以前用到现在不需要用到的库,把这些库都写在requirements里面会造成冗余,而且docker化的时候安装requirements特别慢;
  • 当电脑/服务器里面的项目越来越多,会造成很多项目的依赖库的版本相互冲突,而且也不敢随便删掉/更新某些库,因为有可能会造成某个项目的依赖无法找到或者版本不兼容的故障;
    所以,Python在实际项目应用当中,虚拟环境管理是非常重要的

Python虚拟环境管理工具的发展

随着越来越多的python用于实际项目开发中,Python的虚拟环境管理工具出行了很多,最常用的便是virtualenv,virtualenvwrapper,pipenv这几种,事实上,这几种虚拟环境的管理都是基于virtualenv,只是做了不同的封装,达到了更好的效果。

  1. virtualenv ,此工具会在项目目录下创建一个文件夹,名字叫做virtualenv_name,此目录下会包含python拷贝,之后所有的依赖都会保存至此目录中,在虚拟环境激活状态下,可以安装所需的依赖包,安装的依赖包会保存至项目虚拟环境目录virtualenv_name 下,不会污染系统全局环境;
  2. virtualenvwrapper ,virtualenvwrapper是对virtualenv接口的封装。virtualenvwrapper会将虚拟环境的目录统一保存,不需手动管理,使用起来更加便利;
  3. pipenv ,pipenv是Kenneth Reitz在2017年1月发布的Python依赖管理工具,现在由PyPA维护。你可以把它看做是pip和virtualenv的组合体,而它基于的Pipfile则用来替代旧的依赖记录方式(requirements.txt),pipenv 在易用性上要简单很多,同时增加了 lock 文件,能更好的锁定版本。如果没有特殊要求可以 pipenv 直接使用 lock 的版本,开发又可以小步迭代,实现依赖的稳步升级。

pipenv的优势

  1. pipenv会在项目目录下创建Pipfile和Pipfile.lock文件,可以更好的管理包之间的依赖关系,以前我们需要将虚拟环境依赖包的导出为requirements.txt, 一旦依赖包变动,就要重新导出,现在Pipfile和Pipfile.lock文件可以节省这些步骤,更方便地管理;
  2. 安装卸载包无需激活虚拟环境,直接在项目文件夹下即可操作;
  3. 卸载的时候,可以自动检查依赖库是否被其他包依赖,来选择是否彻底删除。也可以通过 pipenv graph 来查看各个包的依赖关系图;
  4. 当代码需要在虚拟环境执行时,通过pipenv run python xx.py,即可在虚拟环境下执行python文件。如果需要在当前命令行持续执行虚拟环境下任务,可以通过pipenv shell 生成新的shell,此shell即处于虚拟环境激活状态,可以持续在虚拟环境下执行任务;
  5. 便于docker容器化管理,Pipfile文件支持生成requirements文件,便于项目代码docker化管理,另外,pipfile还支持–dev环境,可以在调试阶段安装许多调试工具等,而不影响生产环境的环境。

pipenv使用教程

  • 安装pipenv
    sudo pip install pipenv
    注:无法用pip管理的包,pipenv同样无法使用。
    pipenv依赖:psutil, virtualenv-clone, pew, certifi, urllib3, chardet, requests, mccabe, pyflakes, pycodestyle, flake8等第三方模块。

  • 初始化
    cd
    pipenv install
    该命令会初始化在你的项目根目录下生成pipfile文件

  • 查看pipfile文件

[[source]]

url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"


[packages]


[dev-packages]
  • 在packages下填入的库和版本是可以用于生产环境和生成requirements文件的,在dev-packages下的则可以安装一下调试工具、性能测试工具、python语法工具等
  • 完成填写pipfile文件的项目依赖库
[[source]]

url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"


[packages]
django= "==2.0.6"
requests = "*"  //*表示接受任何版本,默认安装最新版

[dev-packages]

然后执行pipenv install即可生成Pipfile.lock文件

当然上述步骤也可直接用命令行生成:
pipenv install django=2.0.6
pipenv install requests
这样也会安装依赖包并生成Pipfile.lock文件

  • 查看pipfile.lock文件,可以看到安装的所有包的版本、依赖关系等等
{
    "_meta": {
        "hash": {
            "sha256": "5f0257fe8c7a73db1c8de519faa92c658282a01087eb2bfafba7962704c23e27"
        },
        "host-environment-markers": {
            "implementation_name": "cpython",
            "implementation_version": "3.6.4",
            "os_name": "nt",
            "platform_machine": "AMD64",
            "platform_python_implementation": "CPython",
            "platform_release": "7",
            "platform_system": "Windows",
            "platform_version": "6.1.7601",
            "python_full_version": "3.6.4",
            "python_version": "3.6",
            "sys_platform": "win32"
        },
        "pipfile-spec": 6,
        "requires": {},
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.python.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {},
    "develop": {}
}
  • 运行项目
    pipenv run python xxx.py

pipenv命令详解

pipenv命令具有以下选项

$ pipenv
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
  --update         更新Pipenv & pip
  --where          显示项目文件所在路径
  --venv           显示虚拟环境实际文件所在路径
  --py             显示虚拟环境Python解释器所在路径
  --envs           显示虚拟环境的选项变量
  --rm             删除虚拟环境
  --bare           最小化输出
  --completion     完整输出
  --man            显示帮助页面
  --three / --two  使用Python 3/2创建虚拟环境(注意本机已安装的Python版本)
  --python TEXT    指定某个Python版本作为虚拟环境的安装源
  --site-packages  附带安装原Python解释器中的第三方库
  --jumbotron      不知道啥玩意....
  --version        版本信息
  -h, --help       帮助信息

可使用的命令参数:

Commands:
  check      检查安全漏洞
  graph      显示当前依赖关系图信息
  install    安装虚拟环境或者第三方库
  lock       锁定并生成Pipfile.lock文件
  open       在编辑器中查看一个库
  run        在虚拟环境中运行命令
  shell      进入虚拟环境
  uninstall  卸载一个库
  update     卸载当前所有的包,并安装它们的最新版本

常用命令如下:

  • pipenv --python 3.7 创建3.7版本Python环境
  • pipenv install package_name 安装包
  • pipenv graph 查看包与包之间依赖关系
  • pipenv --venv 查看虚拟环境保存路径
  • pipenv --py 查看python解释器路径
  • pipenv install package_name --skip-lock 跳过lock,可以等项目开发好后,再更新所有报的hash值
  • pipenv install --dev package_name 在开发环境安装测试包(可以加–skip-lock参数)
  • pipenv uninstall package_name 卸载包
  • 你也可以指定 $ pipenv install -r path/to/requirements.txt 导入某个requirements文件

pipfile文件详解

  • [[source]]可以指定pypi库的源,这里可以指定多个源,让不同的包从不同的源里面下载:
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[[source]]
url = "http://pypi.home.kennethreitz.org/simple"
verify_ssl = false
name = "home"

[dev-packages]

[packages]
requests = {version="*", index="home"}
maya = {version="*", index="pypi"}
records = "*"

这样就可以指定requests包从home源下载,maya包从pypi源下载

  • [requires] python_version = “3.6” 的加入说明你的应用需要这个版本的Python,以后在运行 pipenv install 时会自动使用这个 Pipfile (比如在另一台机器上)。如果你没有在命令行中指定Python的版本,那么会自动选择 [requires] 中的python_full_version 或 python_version 。执行时候回退到当前系统的默认Python版本。
  • [scripts] 添加自定义的脚本命令,并通过 pipenv run 的方式在虚拟环境中执行对应的命令:
[scripts]
test = "python3 -m unittest discover -s ./tests"
dev = "python3 manage.py runserver 0.0.0.0:8000"

然后执行 pipenv run test 就相当于执行了 pipenv run python3 -m unittest discover -s ./tests,pipenv run dev 相当于 pipenv run python3 manage.py runserver 0.0.0.0:8000。非常方便的功能

最佳实践推荐

  • 通常情况下,把Pipfile和Pipfile.lock都替换版本控制。
  • 当需要兼容多个Python版本时,不要把Pipfile.lock替换版本控制。
  • 在Pipfile的[requires]部分中指定目标Python版本。 理想情况下,您应该只有一个目标Python版本,因为这是一个部署工具。 python_version的格式应为X.Y,而python_full_version的格式应为X.Y.Z。
  • pipenv install语法与pip install完全兼容,完整文档可见此处。
  • 直接用pipenv run python来执行命令,必须在pipfile文件所在路径的目录下执行,例如在根目录下生成的pipfile文件,执行命令为pipenv run python xxx.py或pipenv run python /xxx.py
  • 由于直接用pipenv run来执行会有根目录的限制,所以推荐项目容器化部署,在docker容器里面,把生成的pipfile和pipfile.lock文件导出为requirements再于dockerFile执行安装,这样便可以灵活指定Workdir了,方便cd到项目下任意路径执行python运行命令。

参考链接

  1. https://www.liujiangblog.com/blog/18/
  2. https://hackernoon.com/reaching-python-development-nirvana-bb5692adf30c
  3. https://hustyichi.github.io/2018/09/16/virtual-environment-in-python/
  4. https://ocavue.com/pipenv.html#%E4%BD%BF%E7%94%A8%E4%B8%8D%E5%90%8C%E7%89%88%E6%9C%AC%E7%9A%84-python-%E7%A8%8B%E5%BA%8F

你可能感兴趣的:(Python基础知识)