使用pipenv管理python环境

2019-07-23 10:40:08 浏览数 (1)

在一台新的机器上执行py文件的时候经常会遇到环境的问题。

现有的一些解决方案:

  • requirements.txt
  • python2的virtualenv方案
  • python3的venv方案
  • pipenv pipenv 是 Pipfile 主要倡导者、requests 作者 Kenneth Reitz 写的一个命令行工具,主要包含了Pipfile、pip、click、requests和virtualenv。 Pipfile和pipenv本来都是Kenneth Reitz的个人项目,后来贡献给了pypa组织。 Pipfile是社区拟定的依赖管理文件,用于替代过于简陋的 requirements.txt 文件。

安装

代码语言:javascript复制
$ pip install pipenv

创建环境

在项目路径下使用

代码语言:javascript复制
$ pipenv install
# 也可以按如下方式指定版本
$ pipenv --python 3.6

创建环境

激活环境

代码语言:javascript复制
$ pipenv shell

使用exit可以退出环境

激活环境后可以直接使用python xxx.py以该环境运行脚本

也可以使用pipenv run python xxx.py在不激活环境的情况下用以该环境运行脚本

安装第三方库

代码语言:javascript复制
$ pipenv install flask

也可以在安装第三方库之前,打开Pipfile修改一下里面的url为国内阿里云第三方库地址:

https://mirrors.aliyun.com/pypi/simple

代码语言:javascript复制
[[source]]
name = "pypi"
url = "https://mirrors.aliyun.com/pypi/simple"
verify_ssl = true[dev-packages][packages]
flask = "*"[requires]
python_version = "3.7"

安装flask

查看当前环境的依赖

代码语言:javascript复制
$ pipenv graph

可以看出我们安装了一个Flask的同时,安装了它的4个依赖,其中Jinja2也安装了它的一个依赖

也可以使用pipenv shell进入虚拟环境后使用pip list查看环境

测试

编写一个简单的flask脚本进行测试

app.py

代码语言:javascript复制
from flask import Flask
app = Flask(__name__)@app.route('/')def index():
return '<h1>Hello Pipenv</h1>'

开发环境移植

在一个新的环境中,将代码和Pipfile复制过去

由于Pipfile里面没有所有子依赖包或者确定的版本,因此该安装可能会更新未指定模块的版本号

代码语言:javascript复制
$ pipenv install --dev

新开发环境测试

代码语言:javascript复制
$ pipenv run flask run

生产环境移植

开发环境和生产环境稍微有点区别,开发环境中可能有一些不稳定的版本或依赖,而生产环境一般都比较固定

如果想只安装在开发环境才使用的包:

代码语言:javascript复制
$ pipenv install <第三方库> --dev

运行以下命令,把当前环境的模块lock住, 它会更新Pipfile.lock文件,该文件是用于生产环境的,不应该人为编辑它。

代码语言:javascript复制
$ pipenv lock

然后只需要把代码Pipfile.lock放到生产环境,运行下面的代码,就可以创建和开发环境一样的环境,Pipfile.lock里记录了所有包和子依赖包的确切版本,因此是确定构建

代码语言:javascript复制
$ pipenv install --ignore-pipfile

卸载包

代码语言:javascript复制
$ pipenv uninstall flask

其他

当前虚拟环境目录

代码语言:javascript复制
$ pipenv --venv

当前项目根目录

代码语言:javascript复制
$ pipenv --where

检查安全性和PEP508

代码语言:javascript复制
$ pipenv check

所以可以直接通过将Pipfile加入到版本管理来进行环境的管理

至于Pipfile.lock是否要加入就看具体需求了

0 人点赞