请解释Pipfile和Pipfile.lock的用法

Ste*_*hen 95 python pip

在Python打包的上下​​文中,似乎Pipfile/Pipfile.lock旨在替换requirements.txt.然而,关于这些实际如何工作的文献并不多.我发现pipfile对Python的网站的PyPI部分的演变说明在这里,但它是相当混乱和无法解释的文件不同部分的语义.

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

dan*_*001 128

如果你对Ruby的Bundler或Node的Npm有一定的了解,这些文件背后的概念很简单,类似于其他已有的工具.包管理工具Pipenv使用Pipfile和Pipfile.lock标准.

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

入门

在您的项目文件夹类型中开始使用pipenv很简单...

$ pipenv install
Run Code Online (Sandbox Code Playgroud)

...如果它已经有一个requirements.txt文件,它将生成一个Pipfile带有要求的文件和一个虚拟环境文件夹,否则,它将生成一个空Pipfile文件.如果你不喜欢或改变你对已经安装的东西的想法,只需输入...

$ pipenv uninstall <package>
Run Code Online (Sandbox Code Playgroud)

......你很高兴.要激活pipenv已经生成的虚拟环境,请使用...

$ pipenv shell
Run Code Online (Sandbox Code Playgroud)

...并且您的虚拟环境将被激活.离开环境......

$ exit
Run Code Online (Sandbox Code Playgroud)

...并且您将回到原来的bash/powershell会话.

Pipfile

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

$ pipenv install flask
Run Code Online (Sandbox Code Playgroud)

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

$ pipenv install --dev pytest
Run Code Online (Sandbox Code Playgroud)

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

[[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"
Run Code Online (Sandbox Code Playgroud)

Pipfile.lock

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

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

$ pipenv lock
Run Code Online (Sandbox Code Playgroud)

...并且该工具将根据当前安装的版本自动查找您的虚拟环境文件夹以生成锁定文件.文件语法不像Pipfile那么明显,所以为了简洁起见,它不会在这里显示.


还有什么疑问吗?让我知道,所以我可以改进答案,让其他人从中学习.我已经将我的项目迁移到了它,我每天都在我的工作中使用它,这是值得的;)

  • 我承认,我发现这很令人困惑,因为我正在编写一个教程,我必须决定 [package]/[dev-package] 差异是否重要,或者我是否应该将所有内容都放在 [package] 中。(谷歌搜索是我找到这个页面的原因。)但是在将开发内容放入 [package] 中的同时同时拥有这两者有点让我感到困惑。我可以明白为什么请求应该在 [package] 中。 (2认同)

Bas*_*hur 26

值得注意的是,截至目前(2022 年),pipfile和仅由同一作者编写的工具pipfile.lock使用。pipenv目前没有提及这些文件的标准(即PEP)。

关于pipenv还有其他流行的工具(如诗歌)尝试在不使用pipfiles.

与此相关的是,还有660621pyproject.toml等各种 PEP 支持的曙光,它正在慢慢获得, ,的支持。setuptoolsflithatch

更新:自 2022 年夏季以来,python 打包教程setup.py将基于和 的setup.cfg教程完全替换为pyproject.toml.