Pipenv的使用

虚拟环境:Python各种虚拟环境工具的比较

Posted by mengxun on June 11, 2018

前言

之前就听说过pipenv,但是没有怎么研究过怎么使用,还是用着virtualenv。前两天闲了翻了下文档,发现还是挺好用的一个工具,这个项目在github上已经11k个star

Pipenv是什么

Pipenv说白了就是一个虚拟环境的工具,跟传统的virtualenv起到的作用类似,只是使用起来更加方便,方便在哪?这是文档上说的一些优点:

  • 你不用繁琐的切进virtualenv里然后再pip install了,在Pipenv的世界里直接一步到位。
  • 不需要再用requirements.txt这种东西了,Pipenv使用PipfilePipfile.lock去替代它,而且更加自动化更加精细。
  • 使用哈希校验,可以安全的安装或卸载包。
  • 能让你以图形化(graph )的方式看到你的依赖之间的关系。
  • 通过加载.env简化你的工作(人生苦短)。

看起来确实挺不错,但百看不如一用。还是得用起来,才能知道好不好用,Use it!

安装Pipenv

用pip直接装:

$ pip install pipenv

用mac的同学也可以直接用brew install pipenv安装。

使用Pipenv

装好之后直接就能用了,可以创建一个空目录然后cd进去并执行命令:

pipenv install

完成之后目录下会多出两个文件PipfilePipfile.lock。这两个文件就是用来代替原来的requirement.txt的。Pipfile类似于下面这种形式:

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

[packages]
requests = "*"


[dev-packages]
pytest = "*"

Pipfile的作用其实主要就是记录了pip源是哪个(想速度快可以改成豆瓣源或者清华源)以及当前项目的包有哪些。在上面的例子里有[packages][dev-packages]两个关于包的配置,这其实就是Pipenv的方便之处。因为有些包可能你开发的时候需要用到(比如测试之类的),但是真正生产上部的时候并用不到,就可以将这些包以pipenv install --dev pytest这样的命令安装,装好之后Pipenv会自动add你新装的包到Pipfile里面去(不用像之前需要手工往requirement里去写了)。

Pipfile.lock 文件是通过hash算法将包的名称和版本,及依赖关系生成哈希值,可以保证包的完整性。

这两个文件有了之后我们可以实际用用,这里拿Django举例:

pipenv install django==1.11
pipenv run django-admin startproject pro
pipenv run python pro/manage.py  runserver

voilà

这个时候一个Django项目就跑起来了,并且是在虚拟环境里跑的。而做到这一切你并不需要像之前得先source进入虚拟环境,用Pipenv直接就能跑了,非常方便。

当然,Pipenv的强大之处不止这些,在Pipfile里还可以玩出很多花样,比如指定某个包只有在某个系统运行Pipenv时才安装,生成requirements.txt等等,没事多看文档会发现很多东西:https://docs.pipenv.org/