在一台新的机器上执行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
[[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里记录了所有包和子依赖包的确切版本,因此是确定构建:
$ pipenv install --ignore-pipfile
卸载包
代码语言:javascript复制$ pipenv uninstall flask
其他
当前虚拟环境目录
代码语言:javascript复制$ pipenv --venv
当前项目根目录
代码语言:javascript复制$ pipenv --where
检查安全性和PEP508
代码语言:javascript复制$ pipenv check
所以可以直接通过将Pipfile加入到版本管理来进行环境的管理
至于Pipfile.lock是否要加入就看具体需求了