Pipenv使用入门

Pipenv是官方推荐的的python包管理工具,可以实现项目之间依赖的隔离。本文将介绍pipenv的基本使用。实验环境为win10+Python3.7,其他平台一样适用。顺便说一下,关于Python的依赖管理,可以看一下我写过的博文, Python依赖管理

1. 安装pipenv

使用pipenv之前,需要先安装pipenv及其依赖项。可以使用pip安装,关于pip,可以看我之前的博文,pip的基本使用

安装可以使用命令pip install pipenv

安装完后可以先使用pipenv --help命令预览一下pipenv的用法。

2. 虚拟环境

简单来讲,虚拟环境就是隔离你项目中安装的库的一个环境。想象一下,如果想在自己的电脑做几个不同的项目,而不同的项目需要不同版本的库,都放在相同的环境下可能会带来意想不到的麻烦,很可能会遇到库版本冲突的问题。比如项目A需要numpy1.0,而项目B需要numpy1.15。而pip安装的库只有一个版本,而且是全局的。在虚拟环境下安装的库都会被隔离在该环境中,不会与其他环境冲突。通常,我们为每个项目都创建一个虚拟环境,以此来隔离我们的工作环境。

3. 创建虚拟环境

创建自己的项目目录,在该目录下使用命令pipenv install可以创建一个虚拟的环境。如图

image

如果想指定创建的虚拟环境的Python版本,可以使用下面的命令。

pipenv --python 3.6 #指定使用Python3.6的虚拟环境
pipenv --two        #使用系统的Python2在创建虚拟环境
pipenv --three      #使用系统的Python3在创建虚拟环境

#注意:以上三个参数只能单独使用。它们还具有破坏性,会删除当前的虚拟环境,然后用适当版本的虚拟环境替代。

当给定了一个Python版本的时候,Pipenv会自动扫描系统中能够匹配给定的Python版本的Python解释器,没指定版本时,使用系统默认的Python版本。

执行完命令,项目文件夹会生成两个文件,PipfilePipfile.lock。如果命令执行前项目目录中不存在 Pipfile 文件,该命令将会创建一个 Pipfile 文件。如果已经有Pipfile 文件已经存在,则会根据这个Pipfile生成虚拟环境。

Profile内容解析

使用记事本打开Profile文件,可以看到如下内容。

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

[dev-packages]

[packages]

[requires]
python_version = "3.7"
  • source用来设置仓库地址,即从哪下载虚拟环境所需要的包

  • packages用来指定项目依赖的包,即你安装了的包

  • dev-packages用来指定开发环境需要的包,这类包只用于开发过程,不用与生产环境,比如单元测试相关的包,只在开发阶段有用,这样分开便于管理。

  • requires 中指定目标Python版本

Pipfile.lock文件

  • Pipfile.lock中记录了当前虚拟环境中安装的依赖的版本号以及哈希,以保证每次根据这些值装出来的依赖都是一致的,该文件用来保证包的完整性。记住,任何情况下不要手动修改该文件!

  • 项目提交时,可将Pipfile 文件和Pipfile.lock文件一并提交,给其他开发人员克隆下载,他们可以根据此Pipfile文件运行命令pipenv install生成自己的虚拟环境。

一个好消息是,PyCharm2018.2开始支持pipenv了。我们也可以在创建项目时使用Pipenv,如图
image

4. 虚拟环境位置

我们创建的虚拟环境默认会在~/.virtualenvs中,虚拟环境的命名以我们的项目名为前缀,前面我们所创建的虚拟环境如下图所示

image

如果想看虚拟环境的位置相关信息,可以输入命令pipenv --venv,如图

image

5. 安装Python包

使用pipenv可以轻松优雅地管理项目所依赖的包,下面通过实际使用案例来学习其用法

# 安装命令
pipenv install beautifulsoup4   #在项目所在虚拟环境中安装beautifulsoup4
pipenv install parsel==1.3.1    #安装parsel并指定其版本
pipenv install --dev nose2      #安装nose2包并将其关联为只在开发环境中需要的包

# 卸载命令
pipenv uninstall beautifulsoup4 #在项目所在虚拟环境中卸载beautifulsoup4
pipenv uninstall --all          #从虚拟环境中移除所有已安装的包,但Pipfile.lock文件不受影响
pipenv uninstall --all--dev     #从虚拟环境中卸载所有开发包,并从Pipfile文件中移除这些包

# 更新命令
pipenv update requests          #在项目中更新requests包
pipenv update                   #更新项目中所有的包
pipenv update --outdated        #查看现有包哪些已经过期

#查看命令
pipenv grash                    #显示现有的依赖包
pipenv lock                     #更新Pipfile.lock文件锁定当前环境的依赖版本
  • 上面代码中值得一提的是--dev标志,加了此标志的包只用于开发环境,安装包记录在Pipfile中的dev-package中,如果别人克隆你的Profile文件后使用命令pipenv install创建虚拟环境,默认不会安装dev-package下的安装包,除非使用命令pipenv install --dev

  • Pipefile 和 Pipefile.lock 都会按照你的操作进行自动的更新,如果需要手动修改包的依赖条件,手工编辑 Pipefile 并进行安装即可。

6. 兼容virtualenv

  1. pipenv可以像virtualenv一样使用命令生成requirements.txt文件。
pipenv lock -r --dev > requirements.txt
  1. 同样的,也可以像virtualenv一样通过requirements.txt文件安装包
pipenv install -r requirements.txt
这个命令让我们可以重用以前requirements.txt文件来构建我们新的开发环境,把我们的项目顺利的迁到pipenv。

7. 进入虚拟环境

跟virtualenv一样,要在虚拟环境中运行代码,“激活”虚拟环境。假设可以使用命令pipenv shell进入我们创建的虚拟环境。如下

image

执行完命令,命令提示符前出现了如(TestPipenv-tmf99lpc)的前缀,那是我们虚拟环境的名字,这代表我们已经进入了虚拟环境,在其中使用的命令是虚拟环境版本的命令,不是系统的命令。举个例子,如下图

image

这里进入的是虚拟环境里的Python版本,而不是我们系统环境的Python版本。同样的, 虚拟环境中使用的pip是虚拟环境下的pip,用其安装的库会装在虚拟环境中,不会与系统或其他项目的库冲突。

进入虚拟环境后,我们可以在虚拟环境中运行我们的项目代码,如下

image

如果想退出虚拟环境,输入exit即可。

image

如果想在不进入虚拟环境的情况下使用虚拟环境运行代码,可以使用pipenv run命令,如下

image

8. 删除虚拟环境

如果想删除虚拟环境,可以使用命令pipenv --rm, 如下:

image

值得注意的是,删除了虚拟环境,如果再次使用pipenv shell,会在该目录下创建一个新的虚拟环境,然后再进入虚拟环境。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,009评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,808评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,891评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,283评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,285评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,409评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,809评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,487评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,680评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,499评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,548评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,268评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,815评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,872评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,102评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,683评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,253评论 2 341

推荐阅读更多精彩内容