作过 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 了后端
若是是 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 应用并运行起来。
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
复制代码
新建文件 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
复制代码
若是须要调用虚拟环境中的 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
复制代码
➜ hello_world pipenv --where
/Users/kevinbai/hello_world
复制代码
➜ hello_world pipenv --py
/Users/kevinbai/.local/share/virtualenvs/hello_world-qymNYcuh/bin/python
复制代码
➜ hello_world pipenv --rm
Removing virtualenv (/Users/kevinbai/.local/share/virtualenvs/hello_world-qymNYcuh)...
复制代码
本文首发于公众号「小小后端」。