5分钟 Pipenv 上手指南


Posted in Python onDecember 20, 2018

现在就花5分钟,掌握这个工具的使用吧。

pipenv是requests作者的一个项目, 整合了virtualenv, pip, pipfile, 用于更方便地为项目建立虚拟环境并管理虚拟环境中的第三方模块。

安装 Pipenv

pipenv 的安装和普通的第三方库没什么区别,可以直接使用 pip 命令安装。

pip install pipenv

在 Mac 上可以使用 brew 命令来安装

brew install pipenv

接下来介绍如何使用 Pipenv,我们开启新项目后,首先要做的就是为其单独创建一个虚拟环境(确保你的电脑里面只安装一个Python版本,否则总会出现不可预知的问题)

创建虚拟环境

虚拟环境是每个项目独立使用的 Python 执行环境。

#进入项目所在目录
cd your_project
pipenv install

严格来说,pipenv 没有直接提供创建虚拟环境的命令,而是在背后默默帮你创建,install 其实是安装第三方包的命令,对新项目来说,它会先创建虚拟环境,同时,在项目目录下创建名为 Pipfile 的空文件。

虚拟环境的名字和项目名相关,默认情况下,Pipenv 会自动为你选择虚拟环境的存储位置,在 Windows 下通常为 C:\Users\<YOURNAME>\.virtualenvs

安装第三方包

以前安装包使用 pip 命令,现在你可以用 pipenv 命令来安装,例如我安装 requests 包:

pipenv install requests

使用 pipenv 安装第三方包有什么好处呢?安装前你不需要激活虚拟环境,就直接下载到了虚拟环境中,如果用 pip 安装,你还要先激活该环境。(我经常忘记给虚拟环境取了什么名字)

安装完包之后,Pipfile 文件会被更新,同时新增了 Pipfile.lock 文件

Pipfile 文件中的结构:

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

[dev-packages]

[packages]
requests = "*"

[requires]
python_version = "3.7"

Pipfile 文件中记录了3件事情:

  1. 包从哪里下载的
  2. 需要下载哪些包, * 表示始终下载最新版本, dev-packages 表示专用于开发阶段使用的包。
  3. Python 版本是多少

Pipfile.lock 文件详细记录了这些包的信息,包括这个包的hash值多少,还有包所依赖的其他包有哪些。

把这些信息写在 Pipfile 文件中的好处是,当我们把项目部署到正式环境时,不再需要一个一个去安装了,直接执行 pipenv install 就会自动创建虚拟环境的同时,把 Pipfile 中包都安装好。

激活虚拟环境

运行程序前我们还是要激活虚拟环境,我们可以使用 pipenv shell 来激活,不需要指定名字,只要你在当前项目下执行该命令就行。

pipenv shell

Launching subshell in virtual environment…
Microsoft Windows [Version 10.0.18290.1000]
(c) 2018 Microsoft Corporation. All rights reserved.

(weihub-flask-j3rUnHkH) D:\my\weihub-flask>

注意到了吗? 目录前面多了一对括号括起来的字符串,它就是我们刚刚创建的虚拟环境名字。 激活虚拟环境后,你就可以开始运行你的程序了。

(weihub-flask-j3rUnHkH) D:\my\weihub-flask> python

>>> import requests
>>> requests.get("http://baidu.com").text
'<html>\n<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">\n</html>\n'
>>>

退出虚拟环境使用 exit 命令, 这时候那对括号就消失了。

pipenv run

另外,pipenv 还准备了一个 run 命令,它可以在你不必显示激活虚拟环境的情况下,用虚拟环境执行命令,例如:

pipenv run python -m http.server
pipenv run python main.py

以上就是你要掌握的 Pipenv 基础知识,如果有兴趣,你还可以了解下面的内容

从 requirements.txt 导入

如果是老项目,你把依赖包全部放在 requirements.txt 中,pipenv 很贴心,它支持从 requirements.txt 文件中安装,方便使用 pip 的用户平滑迁移过来。

pipenv install -r requirements.txt

只安装到开发环境

在开发环境下我们要安装 django-debug-toolbar, pytest 这样的包,这些在生产环境其实是用不上的,所以没必要安装,那么我们在安装某个包的时候可以在 isntall 后面加个参数 --dev,表示只安装在开发环境,例如:

pipenv install pytest --dev
 ```

在生产环境执行:
```python
# 生产环境
pipenv install

开发环境执行:

# 开发环境
pipenv install --dev

卸载包

pipenv uninstall requests

删除虚拟环境

pipenv --rm

删除虚拟环境后,会把虚拟环境目录和里面的所有依赖包删除掉,但是 Pipfile 和 Pipfile.lock 文件还会保留。

常见问题:

如果你在使用 pipenv 创建虚拟环境失败了,出现类似这样的错误:

pipenv install
Creating a virtualenv for this project…
Pipfile: D:\my\weihub-flask\Pipfile
Using c:\users\lzjun\appdata\local\programs\python\python37-32\python.exe (3.7.1) to create virtualenv…
[ ===] Creating virtual environment...Already using interpreter c:\users\lzjun\appdata\local\programs\python\python37-32\python.exe
Using base prefix 'c:\\users\\lzjun\\appdata\\local\\programs\\python\\python37-32'
New python executable in C:\Users\lzjun\.virtualenvs\weihub-flask-j3rUnHkH\Scripts\python.exe
ERROR: The executable C:\Users\lzjun\.virtualenvs\weihub-flask-j3rUnHkH\Scripts\python.exe is not functioning
ERROR: It thinks sys.prefix is 'd:\\my\\weihub-flask' (should be 'c:\\users\\lzjun\\.virtualenvs\\weihub-flask-j3runhkh')
ERROR: virtualenv is not compatible with this system or executable
Note: some Windows users have reported this error when they installed Python for "Only this user" or have multiple versions of Python installed. Copying the appropriate PythonXX.dll to the virtualenv Scripts/ directory may fix this problem.

Failed creating virtual environment
[pipenv.exceptions.VirtualenvCreationException]: File "c:\users\lzjun\appdata\local\programs\python\python37-32\lib\site-packages\pipenv\cli\command.py", line 254, in install
[pipenv.exceptions.VirtualenvCreationException]:  editable_packages=state.installstate.editables,
[pipenv.exceptions.VirtualenvCreationException]: File "c:\users\lzjun\appdata\local\programs\python\python37-32\lib\site-packages\pipenv\core.py", line 1741, in do_install
[pipenv.exceptions.VirtualenvCreationException]:  pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]: File "c:\users\lzjun\appdata\local\programs\python\python37-32\lib\site-packages\pipenv\core.py", line 574, in ensure_project
[pipenv.exceptions.VirtualenvCreationException]:  pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]: File "c:\users\lzjun\appdata\local\programs\python\python37-32\lib\site-packages\pipenv\core.py", line 506, in ensure_virtualenv
[pipenv.exceptions.VirtualenvCreationException]:  python=python, site_packages=site_packages, pypi_mirror=pypi_mirror
[pipenv.exceptions.VirtualenvCreationException]: File "c:\users\lzjun\appdata\local\programs\python\python37-32\lib\site-packages\pipenv\core.py", line 935, in do_create_virtualenv
[pipenv.exceptions.VirtualenvCreationException]:  extra=[crayons.blue("{0}".format(c.err)),]
[pipenv.exceptions.VirtualenvCreationException]: Fatal Python error: initfsencoding: unable to load the file system codec
Traceback (most recent call last):
 File "C:\Users\lzjun\.virtualenvs\weihub-flask-j3rUnHkH\lib\encodings\__init__.py", line 31, in <module>
 File "C:\Users\lzjun\.virtualenvs\weihub-flask-j3rUnHkH\lib\codecs.py", line 481
 except UnicodeDecodeError, exc:
        ^
SyntaxError: invalid syntax

很有可能就是你的系统中安装多有个版本的Python,可以模糊搜索 Python*.dll ,把那些不相关的全部删除,重新试试。

如何提高下载速度

修改 Pipfile 文件中的URL,将下载源指定为阿里云或者豆瓣等国内更快的源

[[source]]
name = "pypi"
url = "https://mirrors.aliyun.com/pypi/simple"
#或者使用豆瓣源
url = "http://pypi.douban.com/simple"
verify_ssl = true

Pipenv 有什么缺点

慢,有时候感觉特别慢,就一直卡在 Locking 过程中,你在安装的时候跳过 lock 环节,使用命令

pipenv install --skip-lock

更多操作指南,请参考官方文档: https://pipenv.readthedocs.io/en/latest/basics/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
python函数形参用法实例分析
Aug 04 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
Cython编译python为so 代码加密示例
Dec 23 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
Python函数基本使用原理详解
Mar 19 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
pandas提升计算效率的一些方法汇总
May 30 Python
对python 多个分隔符split 的实例详解
Dec 20 #Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 #Python
Python 获取div标签中的文字实例
Dec 20 #Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 #Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 #Python
用Python编写一个高效的端口扫描器的方法
Dec 20 #Python
python re正则匹配网页中图片url地址的方法
Dec 20 #Python
You might like
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
PHP7内核之Reference详解
2019/03/14 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
jquery 按键盘上的enter事件
2014/05/11 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
Python常用的爬虫技巧总结
2016/03/28 Python
python把1变成01的步骤总结
2019/02/27 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
Python如何绘制日历图和热力图
2020/08/07 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
一套比较完整的软件测试人员面试题
2012/05/13 面试题
药剂专业学生求职信范文
2013/12/28 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
股权收购意向书
2014/04/01 职场文书
中学生寄语大全
2014/04/03 职场文书
安全施工标语
2014/06/07 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
党员公开承诺书2015
2015/01/21 职场文书
干部培训简讯
2015/07/20 职场文书
关于分班的感言
2015/08/04 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书