译者:Jiong 链接: https://robots.thoughtbot.com/how-to-manage-your-python-projects-with-pipenv 在thoughtbot,我们用Ruby和Rails工作,但通常我们总是尝试使用最合适的语言或者框架来解决问题。
我最近一直在探索机器学习技术,所以Python使用地更多。 Ruby项目和Python项目处理之间的一个很大的区别就是管理依赖关系方式的不同。

目前在Python语言中没有类似于Bundler或Gemfiles的东西,所以通常Python开发人员将使用Virtualenv创建一个虚拟环境,再创建一个依赖包列表requirements.txt,然后他们可以使用 Pip进行安装。
这种方法一般都会工作正常,但有时它会表现出一些怪异行为,因此你必须手动安装或删除某些特定版本的包,并记得定期更新requirements.txt文件,以保持项目环境的一致
。特别是当你想要在你的虚拟环境中安装Python包,但它不一定与项目本身相关联。此外,一些项目有时会保留requirements.txt文件的两个版本——一个用于开发环境,一个用于生产环境,这可能会导致更多的复杂性。
幸运的是,Kenneth Reitz的最新工具Pipenv可以用于简化Python项目中依赖项的管理。
它汇集了Pip,Pipfile和Virtualenv的功能,是一个强大的命令行工具。
入门 首先使用pip安装Pipenv及其依赖项,
  1. pip install pipenv
然后将目录更改为包含你的Python项目的文件夹,并启动Pipenv,
  1. cd my_project
  2. pipenv install
这将在项目目录中创建两个新文件Pipfile和Pipfile.lock,如果项目不存在,则为项目创建一个新的虚拟环境。如果你添加–two或–three标志到上面的最后一个命令,它分别使用Python 2或3来初始化你的项目。否则将使用默认版本的Python。 管理Python依赖关系 Pipfile包含关于项目的依赖包的信息,并取代通常在Python项目中使用的requirements.txt文件。如果你在具有requirements.txt文件的项目中启动了Pipenv,则在把它从项目中删除之前,应该使用Pipenv安装该文件中列出的所有依赖包。 要为你的项目安装Python包,请使用install关键字。例如,
  1. pipenv install beautifulsoup4
将安装当前版本的Beautiful Soup包。可以使用uninstall关键字以类似的方式删除包,
  1. pipenv uninstall beautifulsoup4
可以通过更新Pipfile.lock来冻结软件包名称及其版本,以及其依赖关系的列表。这可以使用lock关键字完成的,
  1. pipenv lock
如果另一个用户克隆存储库,可以添加Pipfiles到你的Git存储库,这样他们只需要在他们的系统中安装Pipenv,然后键入,
  1. pipenv install
Pipenv会自动找到Pipfiles,创建一个新的虚拟环境并安装必要的软件包。 管理你的开发环境 通常有一些Python包只在你的开发环境中需要,而不是在你的生产环境中,例如单元测试包。Pipenv将使用–dev标志保持两个环境分开。
  1. pipenv install --dev nose2
nose2,但也将其关联为只在开发环境中需要的软件包。这很有用,因为现在,如果你要在你的生产环境中安装你的项目,
  1. pipenv install
默认情况下不会安装nose2包。但是,如果另一个开发人员将你的项目克隆到自己的开发环境中,他们可以使用–dev标志,
  1. pipenv install –dev
并安装所有依赖项,包括开发包。 运行你的代码 为了激活与你的Python项目相关联的虚拟环境,你可以使用简单地shell命令,比如
  1. pipenv run which python
将在你的虚拟环境中运行which python命令,并显示与你的虚拟环境相关联的python可执行文件所在的路径。这是在虚拟环境中运行你自己的Python代码的一个简单方法,
  1. pipenv run python my_project.py
如果你不想每次运行Python时都输入这么多,你可以在shell中设置一个别名,例如,
  1. alias prp="pipenv run python"
保持简单 我希望这篇文章已经告诉你如何管理你的Python项目与Pipenv。它出现不到一个月,所以我很有兴趣,看看它随着时间的推移如何发展。我当然不希望它变得完全像Ruby的Bundler,但我肯定会支持它,以简化Python项目中依赖的管理。我希望你也这样!

Python 官方推荐的一款打包工具的更多相关文章

  1. 一年时间,Pipenv就成为Python官方推荐的顶级工具?

    Pipenv是Kenneth Reitz在一年多前创建的“面向程序员的Python开发工作流程”,现在已成为管理软件包依赖关系的Python官方推荐资源. Python软件包安装管理的简要历史 为了正 ...

  2. python官方推荐的各阶段学习书籍

    Python学习交流群:463024091,群内每天分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎各位小伙伴入群学习交流! 你是否曾经学期初立下一大堆学习计划,到期末却依旧过着 ...

  3. StarUML---推荐一款UML工具(很好很强大)

    转自:http://www.cnblogs.com/daizhj/archive/2008/04/14/1153121.html 上周我的一个朋友,同时也是目前公司的同事给我推荐了一款UML工具,开始 ...

  4. Webpack实战(一):Webpack打包工具安装及参数配置

    为什么要模块化 javascript跟其他开发语言有很多的区别,其中一个就是没有模块化概念,如果一个项目中有多个js文件,我们只能通过script标签引入的方式,把一个个js文件插入到页面,这种做法会 ...

  5. Python | Pipenv官方推荐的python包管理工具

    原文地址:https://cloud.tencent.com/developer/article/1355672 Pipenv - 官方推荐的的python包管理工具. Pipenv是一款旨在将所有包 ...

  6. Python 官方团队在打包项目中踩过的坑

    花下猫语:这是 packaging 系列的第三篇译文,该系列是全网关于此话题的最详尽(水平也很高)的一个系列.原作者是 Python 官方打包团队成员,是 virtualenv 和 tox 项目的维护 ...

  7. Python程序打包工具PyInstaller

    Python程序执行 py文件:直接提供源码,需要使用者自行安装Python并且安装依赖的各种库 pyc文件:pyc文件是Python解释器可以识别的二进制码,是跨平台的,需要使用者安装相应版本的Py ...

  8. 优秀工具推荐:两款很棒的 HTML5 游戏开发工具

    HTML5 众多强大特性让我们不需要多么高深技术就能创建好玩的网页游戏,同时证明了开放的 Web 技术能与任何其他在游戏开发中使用的技术竞争.正如标题所说,这篇文章推荐的几款很棒 HTML5 游戏开发 ...

  9. Python打包工具setuptools的使用

    将我们写的Python程序发布成包后,可以使其能够安装使用. 在项目上测试的时候,某些情况下,可以将Python打包,然后上传到测试服务器,安装测试. setuptools是常用的打包工具. 一个简单 ...

随机推荐

  1. vue小程序ref和v-for结合使用得到ref数组的一些问题

    项目中需要对每一个民宿里的每一个房间都需要popup弹出层来介绍每一个房间,房间数据都在一个接口(此民宿)上. 主要代码如下: HTML: <view v-for='(item,index) i ...

  2. 关于syx的npy

    请认准官方女友----- STL 任何人在不得syx同意下不能传播其它谣言

  3. 热门提示输入之AutoCompleteTextView

    前言: 在我们百度时,经常会遇到在你输入一个内容后在你的输入框的下面会提示一些别的热门的东西,接下来我们来简单实现这种功能 正文: 直接上代码,和之前的东西都大同小异 下面是Java代码 public ...

  4. Day8 - B - Non-Secret Cypher CodeForces - 190D

    Berland starts to seize the initiative on the war with Flatland. To drive the enemy from their nativ ...

  5. JS:递归基础及范例——斐波那契数列 、 杨辉三角

    定义:程序调用自身的编程技巧称为递归.一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就 ...

  6. JAVA Main方法中调用非静态方法

    在JAVA中静态方法中只能调用其他,静态方法.main方法都是静态方法,如果想调用其它的方法,要么只能是其它的静态方法.还有一种方法就是将当前类实例化在调用它的非静态方法 public class t ...

  7. ListView的DrawSubItem时间添加边框,字体变粗问题

    procedure TFrmrdp.ListView1AdvancedCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubIt ...

  8. 吴裕雄--天生自然java开发常用类库学习笔记:一对多关系范例

    import java.util.List ; import java.util.ArrayList ; public class School{ private String name ; priv ...

  9. GNS3 模拟icmp端口不可达

    R1 : conf t int f0/0 no shutdown ip add 192.168.1.1 255.255.255.0 no ip routing end R2 f0/0: conf t ...

  10. java流程控制语句要点

    java流程控制语句要点 一.java7增强后的switch switch语句后面的控制表达式的数据类型只能是byte.short.char.int四种整数类型,不能是boolean类型,java7以 ...