![](/img/trans.png)
[英]How to remove a pipenv's PipFile, PipFile.lock and associated virtualenv?
[英]Why does pipenv need Pipfile and Pipfile.lock?
(我認為[!])我了解pipenv
(和其他 venvs)背后的原理並經常使用它們。 但是,我從來沒有真正理解為什么pipenv
需要Pipfile
和Pipfile.lock
文件。
現在,一旦您在生產環境中獲得代碼和 Pipfile.lock,您應該安裝記錄的最后一個成功環境:
$ pipenv install --ignore-pipfile
但它並沒有解釋為什么需要使用Pipfile.lock
。 即.lock
文件包含Pipfile
不包含的Pipfile
,以及為什么Pipfile
足以與其他開發人員共享:
現在假設另一個開發人員想要對您的代碼進行一些添加。 在這種情況下,他們將獲取代碼,包括 Pipfile,並使用以下命令:
$ pipenv install --dev
但不足以用於在生產中復制您的環境嗎?
官方 Pipfile 項目對此有話要說:
Python 應用程序的具體要求來自
Pipfile
。 這將包括應從何處獲取包及其松散的版本約束。環境的詳細信息(所有已安裝的帶有固定版本和其他詳細信息的包)將存儲在
Pipfile.lock
,以實現可重復性。 該文件將自動生成,用戶不應修改。
換句話說, Pipfile
是給人用的, Pipfile.lock
是給電腦用的。
在您的Pipfile
您列出了該文件中所需的內容,並以一種有點松散的方式定義它們,例如“Django 版本 2 或更高版本”。 但這還不足以確定性地重現環境。 那是指“Django 2.0.3”還是“Django 2.1.0”?
Pipfile.lock
准確地指定了需求,它也准確地指定了依賴項。 例如,如果您明確想要foo
並將其放入您的Pipfile
,則會生成您的Pipfile.lock
將其鎖定到特定版本。 如果foo
本身依賴於bar
,而bar
依賴於quux
和florp
,則Pipfile.lock
文件也會鎖定bar
、 quux
和florp
,因此依賴關系的微小差異不會破壞事情。
正如@Chris 所說, Pipfile.lock
適用於計算機,而Pipfile
則適用於人類。 如果你查看Pipfile.lock
文件,你會發現每個依賴項甚至都有 sha256 代碼!
該文件是人類無法處理的,您只能處理Pipfile
。 但是Pipfile
不夠嚴格,無法重現完全相同的環境。 所以這就是為什么我們還需要一個Pipfile.lock
。
這是一個類似 npm 的工具。(也許?)
Pipfile
是標識你的項目的依賴,你會從Pipfile
得到依賴樹。
但是根據不同的來源,你會得到不同的包。 所以你可以從.lock
文件中獲得實際的本地依賴。
例如,在 Pipfile 中,您可以看到如下內容:
matplotlib = "*"
numpy = "*"
但是在.lock
文件中,您將看到實際的依賴項,例如:
"pytz": {
"hashes": [
"sha256:a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053",
"sha256:ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277"
],
"version": "==2018.5"
}
簡而言之, Pipfile
是為了更兼容,而.lock
文件是為了獲取本地的實際依賴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.