Pipenv

什么是pipenv

Pipenv is a production-ready tool that aims to bring the best of all packaging worlds to the Python world. It harnesses Pipfile, pip, and virtualenv into one single command.

使用pipenv进行包管理来开发python项目,pipenv提供了功能:进行第三方packages安装,生成项目包依赖文件及在项目开发过程中对依赖包的curd操作的版本记录和隔离出项目python虚拟环境。

pipenv大致工作模式:

  • 基于项目目录环境,即要进入项目根目录下。
  • 在项目目录下,执行pipenv才可以。pipenv依赖项目目录名寻找或创建虚拟环境,依赖项目目录下的Pipfile和Pipfile.lock来进行依赖安装和pypi源的地址信息。
  • 然后pipenv提供进入虚拟环境和通过虚拟环境运行python程序。

Tips:我们经常说到依赖管理,其实主要是发布library库依赖和项目应用依赖,分别对应的是setup.py 与 Pipfile(或者requirements.txt)。对于我们初学者很少会发布library库到pypi,所以库依赖我们很少接触。最多的还是利用github发布项目应用,就使用pip或pipenv来生成项目包依赖文件。

安装pipenv

pip install --user pipenv 这里推荐就安装到user目录下。

pipenv用法

常用命令

  1. pipenv shell 如果当前目录还没有通过pipenv初始化过,那么pipenv shell将类似pipenv install初始化当前项目;如果当前目录已经初始化过有pipfile,那么将通过shell加载虚拟环境,进入虚拟环境。
  2. pipenv --rm 删除当前项目目录额虚拟环境,但是不会删除Pipfile 和 Pipfile.lock.
  3. pipenv install third-package 使用pipenv安装第三方python包到虚拟环境
  4. pipenv --hellp 查看帮助文档
  5. pipenv --venv 查看当前项目的虚拟环境位置
  6. pipenv install --python 3.7.0 初始化时指定使用的python版本,推荐都要明确指定,不然你的项目可能使用了错误的python版本。
  7. pipenv --envs 打印当前环境pipenv的环境变量
  8. pipenv --py 打印当前项目使用的python信息
  9. pipenv install third-package --dev 将包安装设置为开发依赖
  10. pipenv graph 打印依赖树图
  11. pinenv run commands 使用虚拟环境下运行命令

pipenv命令参考

使用pipenv开发项目

两种大的情况

初始化项目

  • 对于初始化的项目,使用pipenv 初始化项目目录,初始化参数要指定好使用的python版本,如参数 --python 3.6 后面的版本好要时当前环境中已经安装了的python版本。如果只是提供参数 --three 或者 --two 分别表示使用py3 或 py2 ,即时当前环境的python3 和 pythhon2 具体小版本号这需要执行查看版本来确定了。也可以从初始化后的Pipfile查看requests.python_version。

  • 具体逻辑如下:

The current rule works like this (if pyenv is not present):
     --three is essentially a shorthand for --python=3 (and --two is --python=2).
     If --python=X is specified, look for python{X} in PATH (if X looks like a version number).
     Otherwise, if requires.python_version = Y look for python{Y} in PATH
     Otherwise use whatever Python Pipenv is on (sys.executable).

  • 使用pipenv初始化项目目录,会创建一个指定的python版本的一个虚拟环境。以后通过pipenv安装的package都会安装到该虚拟环境中。使用pipenv还会将安装的信息记录到Pipfile中。
  • 需要注意的就是pipenv的运行需要在对应的项目目录下,也就是在pipfile文件同目录下进行操作,这样才能自动。要使用注意

已有项目

  • 如果项目开始没有使用pipenv进行依赖记录。如果是requirements.txt,然后重新通过pipenv来管理项目依赖,那依赖packages的安装,则需要pipenv从requirements.txt读取并安装最后重新生成依赖到Pipfile文件中,并将三方包都安装到了项目的虚拟环境中,命令:pipenv install -r ./requirements.txt。
  • 如果就是Pipfile,则从pipfile中安装依赖。
  • 对应当前没有的版本,如果系统安装了pyenv,会提示通过pyenv安装需要的python版本。

pipenv 结合 pyenv

首先,要安装pyenv
然后在通过pipenv install --python 3.7.0 初始化项目并指定python版本,如果该python当前系统没有,那么pipenv会自动人性化的调用pyenv安装3.7.0版本。

大致就这样。

参考文档

Pipenv项目化你的python应用的更多相关文章

  1. Python不能用于大型项目?人们对Python的十大误解

    Python 类型系统的特点是拥有强大.灵活的类型操作. 维基百科上对此作出的阐述. 而存在一个不争而有趣的事实是, Python 是比Java更加强类型的. Java 对于原生类型和对象区分了类型系 ...

  2. 【无人机航空摄影测量精品教程】目录:摄影测量、Pix4d、EPS、CC、PhotoScan项目化作业流程及注意事项汇总

    目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 该专栏为目前最为热门的无人机航测内外业项目,主要内容包括:无人机航测外业作业流程(像控点布设.航线规划.仿地飞行.航拍)和内业数据 ...

  3. 结构化您的Python工程

    我们对于"结构化"的定义是您关注于怎样使您的项目最好地满足它的对象性,我们 需要去考虑如何更好地利用Python的特性来创造简洁.高效的代码.在实践层面, "结构化&qu ...

  4. 【2018.05.09 Python学习及实践】个人项目中使用的Python库备忘-持续更新

    科研中无论是使用C/C++.Python.Matlab,如果能找到合适的库可谓是事半功倍: 有时候忙活半天才发现本身就有成熟的库可用,自己实现的在功能.性能.安全性上都远远不及,虽然锻炼了能力,但存在 ...

  5. 如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法

    问题:之前使用pycharm,用的挺溜,但是电脑配置实在不争气,pycharm启动久了,耗去大量内存,导致运行起来越来越慢,于是转向使用sublime text. 把项目从pycharm切换到subl ...

  6. 資料視覺化:使用Python與JavaScript 简介和目录

    內容簡介 學習如何運用Python與JavaScript這組對超級強大的組合,處理手中的原始資料,建構出功能強大的互動式視覺化網站.在這一本以實務為主的書中,將告訴您如何善用Python和JavaSc ...

  7. 车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)

    最近看到geihub上有个车牌识别的项目,感觉很有意思,从上面fork了一下弄到本地自己跑了下.在安装过程中遇到了一些问题,记录如下. 项目github连接:https://github.com/sz ...

  8. django 商城项目之购物车以及python中的一些redis命令

    最近在用django restframe框架做一个商城项目,有一个关于购物车的业务逻辑,是用cookie和redis存储的购物车信息,在这里记录一下. 完成一个商城项目,如果不做一个购物车,就是十分可 ...

  9. 适合新手练习的Python项目有哪些?Python爬虫用什么框架比较好?

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. Python爬虫一般用什么框架比较好?一般来讲,只有在遇到比较大型的需求时 ...

随机推荐

  1. python接口自动化(二十四)--unittest断言——中(详解)

    简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言,这篇我们将通过结合和围绕实际的工作来进行unittest的断言.这里以获取城市天气预报的接口为例,设计了 2 个用例,一个是查询北京 ...

  2. 从一亿个ip找出出现次数最多的IP(分治法)

    /* 1,hash散列 2,找到每个块出现次数最多的(默认出现均匀)—–>可以用字典树 3,在每个块出现最多的数据中挑选出最大的为结果 */ 问题一: 怎么在海量数据中找出重复次数最多的一个 算 ...

  3. LVM 移除PV步骤

    1.先查看需要收缩文件系统的使用情况,收缩后的文件系统空间不能小于已经使用的空间 df -hT 2.卸载需要收缩的文件系统(以/dev/vg0/lvm1为例) umount /dev/vg0/lvm1 ...

  4. 基于tcp实现远程执行命令

    命令执行服务器: # Author : Kelvin # Date : 2019/1/30 20:10 from socket import * import subprocess ip_conf = ...

  5. nodeJs的nodemailer发邮件报错hostname/IP doesn't match certificate's altnames怎么解决?

    今天在开发过程中碰到一个问题,即使用node发送邮件时报错hostname/IP doesn't match certificate's altnames,在网上查了解决办法有两个, 加rejectU ...

  6. 为什么设置overflow为hidden可以清除浮动带来的影响

    1.问题起源 在平时的业务开发写CSS中,为了满足页面布局,元素的浮动特性我们用的不能再多了.使用浮动的确能够解决一些布局问题,但是也带了一些副作用影响,比如,父元素高度塌陷,我们有好几种可以清除浮动 ...

  7. 改造断路器集群监控Hystrix Turbine实现自动注册消费者、实时监控多个服务

    在上一篇文章中,我们搭建了Hystrix Dashoard,对指定接口进行监控.但是只能对一个接口进行监听,功能比较局限: Turbine:汇总系统内多个服务的数据并显示到 Hystrix Dashb ...

  8. Java KeyStore 用命令生成keystore文件

    1.生成keyStore文件 在命令行下执行以下命令: Shell代码 收藏代码 keytool -genkey -validity 36000 -alias www.zlex.org -keyalg ...

  9. #if和#ifdef的区别

    学习STM32偶然发现:在Keil中直接预先定义宏USE_STDPERIPH_DRIVER,但是却没有指定宏的值.而在头文件中判断用的是如下代码: #ifdef USE_STDPERIPH_DRIVE ...

  10. ASP.NET Core 快速入门(实战篇)

    上篇讲了<asp.net core在linux上的环境部署>.今天我们将做几个小玩意实战一下.用到的技术和工具有mysql.websocket.AngleSharp(爬虫html解析).n ...