Pipenv installは、Pipfileからすべてをインストールするわけではありません

Aug 22 2020

私はこれをUbuntu20.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

何らかの理由でホワイトノイズと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の使用に戻りたいと思います。

私が知る限り、ファイルのエンコードや行末に問題はなく、いつ/なぜこれが正確に発生し始めたのかはわかりません。

編集:実行pipenv install djangoするとdjangoが正しくインストールされますが、pipfileとpipfile.lockは同じままです。つまり、これはPipfileの問題ではありません。

回答

1 MaksymilianMozolewski Aug 23 2020 at 11:48

修正:pipfileを削除し、各パッケージを手動で再インストールすることで機能しました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",]

新しい環境に各パッケージを手動で再インストールした後:

[[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"

このpipfileからのインストールは正常に機能しpipenv install、すべてのパッケージがインストールされました。

なぜこれがすべて起こったのか正確にはわかりません。おそらくそれはpipenvのバグであるか、下位互換性がないのかもしれません。誰かが知っているなら私に知らせてください。

すべてのパッケージを再インストールせずにこれを修正したい場合は、次のようなビットを置き換えるだけです。

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

そしてそれらをこのフォーマットに変換します:

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

その実行を実行した後pipenv install、すべての依存関係が正しくインストールされます

Pipenvリポジトリに問題を提出しました: https://github.com/pypa/pipenv/issues/4433

PrakharGurunani Aug 22 2020 at 18:07

setuptoolspipおよびwheelはpythonパッケージの一部であり、プリインストールされています。それらを最新バージョンに更新しておいてください。

ArjaanAuinger Aug 22 2020 at 19:29

ここで私が見る唯一のパターンは、ホワイトノイズとdjango-storagesがトップ[パッケージ]の一部ではないということです。たぶん、問題の原因に近づくために、gunicornなどのパッケージを一番下まで通過させて、次のようにします。

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

また、PythonPATHはWindowsで少し奇妙に動作します。切り替えたときに、問題がないことを確認してください。パッケージがenvになく、そこに表示されている場合は、ネイティブPythonインストールを確認してください:)