请解释Pipfile和Pipfile.lock的用法

时间:2017-09-20 19:27:59

标签: python pip

在Python打包的上下​​文中,似乎Pipfile / Pipfile.lock旨在替换requirements.txt。然而,关于这些实际如何工作的文件并不多。我在Python网站here的PyPi部分找到了对pipfile的不断发展的描述,但它非常混乱,并没有解释文件不同部分的语义。

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

2 个答案:

答案 0 :(得分:93)

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

Pipenv以一种默认的标准方式为您处理虚拟环境(不再需要激活和停用)。下面是一些帮助您入门的基础知识,请参阅pipenv website

使用入门

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

$ pipenv install

...如果它已经有requirements.txt个文件,它会生成一个包含要求的Pipfile文件和一个虚拟环境文件夹,否则会生成一个空的Pipfile文件。如果您不喜欢或改变您对已安装的内容的想法,只需输入...

$ pipenv uninstall <package>

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

$ pipenv shell

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

$ exit

...你将回到原来的终端会议。

Pipfile

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 那样明显,所以为了简洁起见,它不会在这里显示。

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

答案 1 :(得分:-1)

正如@Charles Duffy上面解释的那样,它是Ruby世界中GemfileGemfile.lock的直接类似物。有关更多详细信息,请参见下面的参考。

参考:https://medium.com/never-hop-on-the-bandwagon/gemfile-and-gemfile-lock-in-ruby-65adc918b856