Pipenv 快速上手

作过 Python Web 项目的伙伴可能都有体会,每次新建一个项目,本身得手动建一个虚拟环境,把包装好了以后,还得本身把装的包导入到文件中,方便部署。时间久了以后,感受重复劳动太多,应该改变一下了,这不就找到 Pipenv 了。python

Pipenv 是 Kenneth Reitz 开发的又一个 for Humans 项目,于 2017 年 1 月份建立,仅仅用了一年左右的时间便成了官方推荐工具。Kenneth Reitz,做为一个 Python 开发者应该都知道吧,不知道能够去面壁了,哈哈。就算你不知道他,你也必定用过他的一个库 requests/requests,它写的库基本上都有 for Humans 标签,用起来,也确实像标签说的那样,简单好用。git

Pipenv 我的以为主要解决了下面几个麻烦事:github

(1)整合了 pip 和 virtualenv,如今没必要将这两个工具分开使用了shell

(2)不用本身新建 virtualenv 了flask

(3)不用本身导出包依赖到 requirements.txt 了后端

1 安装

若是是 Mac 的话,直接bash

brew install pipenv
复制代码

就搞定了。若是没有 Python 它会自动给你安装好。app

其它平台的话,首先确保你有安装 Python,才能安装 Pipenv。若是没装的话,能够本身去百度/谷歌/官网寻找安装方法。curl

若是你以前装过 pip,可使用以下命令将 Pipenv 装到你的用户目录工具

pip install --user pipenv
复制代码

若是以前没装过 pip 的话,可使用下面的命令,简单粗暴

curl https://raw.githubusercontent.com/kennethreitz/pipenv/master/get-pipenv.py | python
复制代码

而后看下是否安装成功,终端执行

➜  ~ pipenv --version
pipenv, version 2018.7.1
复制代码

看来已经 OK,若是你的提示命令不存在之类的问题,说明没有安装成功,能够去看看官网的安装文档。

好了,下面咱们来讲说 Pipenv 的简单使用。便于说明,咱们打算新建一个基于 Flask 的 hello_world 应用并运行起来。

2 开始

Pipenv 的虚拟环境是基于项目的,一个项目便会建立一个虚拟环境,不过没问题,咱们以前开发也是这样的啊。

建立项目文件夹

➜  ~ mkdir hello_world
复制代码

好,咱们如今准备建立一个 Python 3.6.0 的虚拟环境

➜  ~ cd hello_world
➜  hello_world pipenv --python 3.6.0
复制代码

等待一小会儿就安装成功了。

看下虚拟环境在什么目录

➜  hello_world pipenv --venv
/Users/kevinbai/.local/share/virtualenvs/hello_world-qymNYcuh
复制代码

看下当前目录多了什么文件

➜  hello_world ls
Pipfile
复制代码

看下它的内容

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.6"
复制代码

其中,[[source]] 小节记录安装源信息,[packages] 记录依赖包信息,[dev-packages] 记录开发依赖包信息,[requires] 记录依赖的环境信息,这里要求 Python 版本必须等于 3.6。

好了,咱们安装一个包试试

➜  hello_world pipenv install requests
复制代码

执行成功后,Pipfile 会在 [packages] 小节下会添加一行 requests 信息

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
requests = "*"

[dev-packages]

[requires]
python_version = "3.6"
复制代码

同时生成一个 Pipfile.lock 文件,该文件记录了安装包的具体版本。线上部署时执行命令

➜  hello pipenv install
复制代码

会自动给你生成相应的虚拟环境并安装 Pipfile.lock 中的包,线上环境和开发环境的包的版本能够达到彻底一致。

若是没有 Pipfile.lock,会根据 Pipfile 生成虚拟环境(若是没有的话)并安装相应的包。

若是两个文件都没有的话,会生成一个默认的虚拟环境与两个带默认信息的 Pipfile 和 Pipfile.lock 文件。

这里咱们删除 requests 包

➜  hello_world pipenv uninstall requests
复制代码

安装 Flask

➜  hello_world pipenv install flask
复制代码

安装好后,咱们能够看下包的依赖信息

➜  hello_world pipenv graph
certifi==2018.4.16
chardet==3.0.4
Flask==1.0.2
  - click [required: >=5.1, installed: 6.7]
  - itsdangerous [required: >=0.24, installed: 0.24]
  - Jinja2 [required: >=2.10, installed: 2.10]
    - MarkupSafe [required: >=0.23, installed: 1.0]
  - Werkzeug [required: >=0.14, installed: 0.14.1]
idna==2.7
urllib3==1.23
复制代码

3 编写代码并执行应用

新建文件 hello_world/main.py

# coding=utf-8

from flask import Flask

app = Flask(__name__)


@app.route('/', methods=['GET'])
def index():
    return 'Hello, World!'


if __name__ == '__main__':
    app.run()
复制代码

终端激活虚拟环境

➜  hello_world pipenv shell
复制代码

而后运行应用

(hello_world-qymNYcuh) ➜  hello_world python main.py
 * Serving Flask app "main" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
复制代码

访问 http://127.0.0.1:5000,看到 Hello, World! 信息,搞定。

终端若是要退出虚拟环境,执行以下命令便可。

(hello_world-qymNYcuh) ➜  hello_world exit
复制代码

4 其它经常使用命令或选项

  • pipenv run 执行当前项目对应的虚拟环境中的已安装的脚本

若是须要调用虚拟环境中的 pip 命令,除了使用 pipenv shell 进入环境执行之外,也可使用 pipenv run。好比

➜  hello_world pipenv run pip freeze
certifi==2018.4.16
chardet==3.0.4
click==6.7
Flask==1.0.2
idna==2.7
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
urllib3==1.23
Werkzeug==0.14.1
复制代码
  • --where 当前项目路径
➜  hello_world pipenv --where
/Users/kevinbai/hello_world
复制代码
  • --py 当前项目的虚拟环境的解释器所在路径
➜  hello_world pipenv --py
/Users/kevinbai/.local/share/virtualenvs/hello_world-qymNYcuh/bin/python
复制代码
  • --rm 删除当前项目的虚拟环境目录
➜  hello_world pipenv --rm
Removing virtualenv (/Users/kevinbai/.local/share/virtualenvs/hello_world-qymNYcuh)...
复制代码
  • -h 帮助,查看可用的命令以及选项介绍

本文首发于公众号「小小后端」。

相关文章
相关标签/搜索