如何使用Pipfile和Pipfile.lock?


130

在Python封装的上下文中,似乎Pipfile / Pipfile.lock旨在替代Requirements.txt。但是,关于它们如何实际工作的文献很少。我在这里的Python网站的PyPi部分找到了对pipfile的不断发展的描述,但这很混乱,并且没有解释文件不同部分的语义。

关于如何理解这些文件的任何指示?


2
这是一个直接模拟Gemfile,并Gemfile.lock从Ruby世界:该.lock文件有每个依存性的特定版本; 没有该扩展名的人仅具有已知的控制人版本。也就是说,要求对仍在发展中的事物进行解释,并且距离定义明确,标准化程度远的地方还有很长的路要走,这也许还为时过早。
Charles Duffy

(同样,之间的区别Pipfile,并requirements.txt在很大程度上是前者试图从Ruby世界采取的特点,即能够为多种环境和条件下使用/选项/等指定依赖集。单个文件内)。
Charles Duffy

1
似乎它已经被部署在Heroku的“ Python入门” 仓库github.com/heroku/python-getting-started.git)中,无论您喜不喜欢,它似乎已经正式投入生产。
斯蒂芬

知道了 就是说-这些文档对我来说看起来很扎实。我不知道我能在答案中写些什么,而这不仅会重述他们。
Charles Duffy

1
如果您指的是我在OP中创建的链接,则省略了许多内容,例如,在称为source的部分中实际上意味着什么。
斯蒂芬

Answers:


164

如果您对Ruby的Bundler或Node的Npm有一定的了解,这些文件的概念很简单,并且与其他现有工具类似。Pipenv是使用Pipfile和Pipfile.lock文件实现这些目标的程序包和虚拟环境管理工具。

Pipenv以一种默认的标准方式为您处理虚拟环境(不再需要激活和停用)。下面是一些入门的基础知识,请在pipenv网站上查看更多信息

入门

在您的项目文件夹类型中,开始使用pipenv很容易。

$ pipenv install

...,如果已经有一个requirements.txt文件,它将生成一个Pipfile带有需求的文件和一个虚拟环境文件夹,否则,它将生成一个空Pipfile文件。如果您不喜欢或改变主意,请输入...

$ pipenv uninstall <package>

...而且您很高兴。要激活已生成pipenv的虚拟环境,请继续...

$ pipenv shell

...,您的虚拟环境将被激活。离开环境...

$ exit

...,您将回到原来的终端会话。

点文件

Pipfile文件旨在指定套餐要求为您的Python应用程序或库,既要发展和执行。您只需使用...即可安装软件包。

$ pipenv install flask

...并将其添加为部署和执行的依赖项或使用...

$ pipenv install --dev pytest

...,它将用作开发时间的依赖。文件语法非常简单,如下所示。

[[source]] # Here goes your package sources (where you are downloading your packages from).
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages] # Here goes your package requirements for running the application and its versions (which packages you will use when running the application).
requests = "*"
flask = "*"
pandas = "*"

[dev-packages] # Here goes your package requirements for developing the application and its versions (which packaes you will use when developing the application)
pylint = "*"
wheel = "*"

[requires] # Here goes your required Python version.
python_version = "3.6"

Pipfile.lock

Pipfile.lock是用来规定的基础上,目前在包装Pipfile,应使用哪个那些特定版本,避免自动升级依赖于对方的包和破坏你的项目的依赖关系树的风险。

您可以使用...锁定当前安装的软件包。

$ pipenv lock

...,然后该工具将根据当前安装的版本查找您的虚拟环境文件夹,以自动为您生成锁定文件。文件语法并不像Pipfile那样明显,因此为简洁起见,此处不会显示。


这是一个有趣的答案,但是我[[source]]想当我问的时候我不太了解到底是什么意思,例如pipenv或其他下载的软件包的来源?我猜这两个文件的其余部分很明显。
斯蒂芬

1
我承认,我感到困惑,因为我正在研究一个教程,在该教程中,我必须确定[package] / [dev-package]的区别是否重要,或者是否应该将所有内容都放入[package]。(为此,我进行了谷歌搜索。)但是在将开发人员的东西放在[package]中的同时把两者都扔给了我。我可以看到为什么请求应该放在[package]中。
Al Sweigart

1
根据要求进行了更改,以避免对开发包造成混乱,感谢您的评论,希望它现在不再引起混淆了:)
danieldeveloper001

1
我想这是一个好主意,如果您想在源代码的发展过程中跟踪那些软件包的版本,因为大多数软件包都将在版本上加注星标Pipfile。如果某个软件包升级出现问题,那么应该可以通过查看软件包版本历史来修复它,实际上,请求库的创建者之一建议在此处进行此操作
danieldeveloper001

1
@Stephen,实际上是相反的,如pipenv安装文档中所述,您可以指定--skip-lock标志以强制其忽略Pipfile.lock文件,而不是强制其使用;)
danieldeveloper001
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.