Pipenv install 不会安装 Pipfile 中的所有内容

Pipenv install does not install everything from Pipfile

我 运行 这是全新的 Ubuntu 20.04 安装:

pipenv install 使用 Pipfile:

$ cat Pipfile
[packages]
Django = "*"
django-split-settings = "*"
python-dotenv = "*"
django-compressor = "*"
django-libsass = "*"
Brotli = "*"
django-htmlmin = "*"
gunicorn = "*"
dj-database-url = "*"
wagtail = "*"
wagtail-metadata = "*"
wagtail-blocks = "*"
psycopg2 = "*"
django-tz-detect = "*"
wagtailcodeblock = "*"
django-taggit = "*"
django-taggit-templatetags2 = "*"
django-fontawesome-5 = "*"
django-debug-toolbar = "*"
wagtail-robots = "*"
wand = "*"

[dev-packages]
pylint = "*"
django-debug-toolbar = "*"

[requires]
python_version = "3.7"

[packages.whitenoise]
extras = [ "brotli",]

[packages.django-storages]
extras = [ "dropbox",]

然后 运行:

$ pipenv run pip list
Package         Version
--------------- -------
django-storages 1.9.1
pip             20.2.2
setuptools      49.6.0
wheel           0.35.1
whitenoise      5.2.0

它出于某种原因只安装 whitenoise 和 django-storages,我该如何解决这个问题?

补充信息:

$ which python
/home/maks/.local/share/virtualenvs/personal-website-lhNGB4ub/bin/python

$ which pip
/home/maks/.local/share/virtualenvs/personal-website-lhNGB4ub/bin/pip

$ pyenv which python
/home/maks/.pyenv/versions/3.7.8/bin/python

这个问题最近在 windows 上开发了一段时间后突然出现,当它发生时我切换到只使用 requirements.txt 文件,但现在我想回到使用 pipenv .

据我所知,这不是文件编码或行尾的问题,我不确定 when/why 这到底是怎么开始的。

编辑: 运行 pipenv install django 将正确安装 django 但 pipfile 和 pipfile.lock 保持相同意味着这不是 Pipfile

的问题

setuptoolspipwheel 是 python 软件包的一部分并已预安装。只需将它们更新到最新版本即可。

我在这里看到的唯一模式是,whitenoise 和 django-storages 不是顶级 [packages] 的一部分。也许,只是为了更接近问题的根源,尝试拿一个包,例如 gunicorn,把它放到底部,然后做这样的事情:

`[packages.gunicorn]
 extras = [ "",]`

另外,PythonPATH 在 Windows 上工作有点奇怪,请确保这不是您切换时的问题。如果包出现在那里而不是在你的环境中,也许看看你的本地 Python 安装 :)

修复: 因此,有效的方法是删除 pipfile 并手动 re-installing 每个包 pipenv install,这导致 pipfile 看起来略有不同,从外观上看是导致我出现此问题的原因,是对 pipenv 本身的更新。 ..看看:

旧 Pipfile:

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[requires]
python_version = "3.7"

[packages]
Django = "*"
django-split-settings = "*"
python-dotenv = "*"
django-compressor = "*"
django-libsass = "*"
Brotli = "*"
django-htmlmin = "*"
dj-database-url = "*"
wagtail = "*"
wagtail-metadata = "*"
wagtail-blocks = "*"
psycopg2 = "*"
django-tz-detect = "*"
wagtailcodeblock = "*"
django-taggit = "*"
django-taggit-templatetags2 = "*"
django-fontawesome-5 = "*"
django-debug-toolbar = "*"
wagtail-robots = "*"
wand = "*"
gunicorn = "*"

[dev-packages]
pylint = "*"
django-debug-toolbar = "*"

[packages.whitenoise]
extras = [ "brotli",]

[packages.django-storages]
extras = [ "dropbox",]

手动 re-installing 新鲜环境中的每个包后:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]
pylint = "*"
django-debug-toolbar = "*"

[packages]
django = "*"
django-split-settings = "*"
python-dotenv = "*"
django-compressor = "*"
django-libsass = "*"
brotli = "*"
django-htmlmin = "*"
dj-database-url = "*"
wagtail = "*"
wagtail-metadata = "*"
wagtail-blocks = "*"
django-tz-detect = "*"
wagtailcodeblock = "*"
django-taggit = "*"
django-taggit-templatetags2 = "*"
django-fontawesome-5 = "*"
django-debug-toolbar = "*"
wagtail-robots = "*"
wand = "*"
whitenoise = {extras = ["brotli"], version = "*"}
django-storages = {extras = ["dropbox"], version = "*"}
gunicorn = "*"

[requires]
python_version = "3.7"

使用 pipenv install 从这个 pipfile 安装工作正常,所有软件包都已安装。

我不太确定为什么会发生这一切,也许是 pipenv 中的一个错误,或者可能没有 backward-compatibility。如果有人知道请告诉我。

如果您想在不重新安装每个软件包的情况下解决这个问题,您可以简单地替换如下所示的位:

[packages.whitenoise]
extras = [ "brotli",]

并将它们转换成这种格式:

whitenoise = {extras = ["brotli"], version = "*"}

完成后 运行 pipenv install 并且您的所有依赖项都将正确安装

我在 Pipenv 存储库上提交了一个问题:https://github.com/pypa/pipenv/issues/4433