Apa itu "pkg-resources == 0.0.0" dalam output dari perintah pip freeze

157

Ketika saya menjalankan pip freezesaya melihat (di antara paket yang diharapkan lainnya) pkg-resources==0.0.0. Saya telah melihat beberapa posting menyebutkan paket ini (termasuk yang ini ), tetapi tidak ada yang menjelaskan apa itu, atau mengapa itu termasuk dalam output pip freeze. Alasan utama saya bertanya-tanya adalah karena penasaran, tetapi juga, tampaknya hal-hal yang rusak dalam beberapa kasus ketika mencoba untuk menginstal paket dengan requirements.txtfile yang dihasilkan dengan pip freezeyang termasuk pkg-resources==0.0.0baris (misalnya ketika Travis CI mencoba menginstal dependensi melalui pipdan menemukan ini baris).

Apa itu pkg-resources, dan apakah boleh menghapus baris ini requirements.txt?

Memperbarui:

Saya telah menemukan bahwa baris ini sepertinya hanya ada di output pip freezeketika saya berada di a virtualenv. Saya masih tidak yakin apa itu atau apa fungsinya, tetapi saya akan menyelidiki lebih lanjut mengetahui bahwa itu kemungkinan terkait virtualenv.

Elethan
sumber
"Dalam beberapa kasus tampaknya merusak hal-hal ketika mencoba menginstal paket dengan file requirement.txt yang dihasilkan dengan pembekuan pip yang mencakup baris pkg-resources == 0,0.0." . Bisakah Anda memberi contoh untuk itu?
Dimitris Fasarakis Hilliard
@ Jim, poin bagus. Saya menambahkan contoh yang saya temui.
elethan
hm, apa versimu pip? Saya pikir ini mungkin sesuatu yang mereka lewatkan dalam rilis lama karena 8.1.2saya tidak punya entri untuk pkg-resources. (Yang seharusnya tidak karena aku cukup yakin pkg-resourcesdatang dengan setuptools).
Dimitris Fasarakis Hilliard
1
@ Jim baru saja terpikir oleh saya bahwa itu mungkin terkait virtualenv, dan memang, ketika saya tidak dalam virtualenv saya tidak melihatnya juga. Ini masih belum menjelaskan apa itu, tetapi setidaknya merupakan petunjuk yang bisa saya selidiki.
elethan

Jawaban:

181

Menurut https://github.com/pypa/pip/issues/4022 , ini adalah bug yang dihasilkan dari Ubuntu yang memberikan metadata yang salah ke pip. Jadi, sepertinya tidak ada alasan yang bagus untuk perilaku ini. Saya mengajukan bug tindak lanjut dengan Ubuntu. https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463

Untuk mencadangkan jawaban sebelumnya, Anda sebaiknya menghapus baris itu dari requirement.txt Anda. Berikut ini adalah contoh Membuat stanza file yang aman membekukan daftar paket Anda (masukkan Makefile Anda dan jalankan dengan make freeze):

freeze:
    pip freeze | grep -v "pkg-resources" > requirements.txt
Craig Wright
sumber
9
Ini bukan bug khusus Ubuntu, debian memiliki masalah yang sama
ubur
1
Awalnya ide @MohammedShareefC tampaknya berhasil, tapi kemudian saya dapatkan AttributeError: module 'pkg_resources' has no attribute 'iter_entry_points', jadi saya pikir yang terbaik adalah menghapusnyarequirements.txt
arod
2
masih menyebabkan sakit kepala ketika mencoba untuk menyebarkan ke heroku
Martins
3
Ini sepertinya masih menjadi masalah dengan ubuntu 18.04
Carmine Tambascia
3
Masih ada masalah dengan Python 3.8 di Ubuntu 19.04
eric.frederich
13

Adapun bagian dari pertanyaan Anda " apakah boleh menghapus baris ini? ":

Saya memiliki masalah yang sama di sini berkembang pada 16,04 ubuntu dengan sangat baris dalam persyaratan. Ketika digunakan pada debian 8.5 running "pip install -r requirements.txt"pip mengeluh bahwa sumber daya pkg "tidak ditemukan" tetapi ada paket global yang dipasang "sumber daya python-pkg" sehingga ketergantungan harus dipenuhi. Sama di ubuntu: Paket ada di sana juga.

Seperti yang dinyatakan di sini tampaknya ada beberapa "paket yang diinstal secara implisit".

Jadi: Jika Anda menggunakan Debian / Ubuntu yang memasang python-pkg-resources, Anda harus menghapusnya . Saya melakukannya dan semuanya berjalan dengan baik. Namun karena saya bukan ahli dalam hal ini, Anda harus ingat bahwa ini dapat menyebabkan komplikasi ketika digunakan di komputer lain.

karlsebal
sumber
Terimakasih atas infonya. Saya akhirnya menghapusnya juga dan belum melihat konsekuensi apa pun, tetapi peringatan yang sama yang Anda sebutkan tentu saja berlaku. Di mana Anda menginstal ke / dari virtualenvjuga?
elethan
Ya, saya mencoba menginstal dari dalam virtualenv. Karena paket systemwide hadir dan saya tidak ingin mengacaukan semuanya, saya tidak mencoba menginstal per pip systemwide.
karlsebal
1

menemukan jawaban ini di tautan ini: https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463

oleh: Louis Bouchard (louis) menulis pada 2019-11-16:

Ini berhasil untuk saya. Tapi saya bukan ahli jadi, jika seseorang meremehkannya lebih baik, akan lebih baik jika menjelaskannya.

Halo,

untuk apa nilainya, masalahnya berasal dari versi debianized dari virtualenv yang menggunakan versi pkg_resource yang didebugasi yang akan ditambahkan ke dalam virtualenv pada saat pembuatan:

$ virtualenv .
Running virtualenv with interpreter /usr/bin/python2
New python executable in /home/caribou/git/quividi/test/bin/python2
Also creating executable in /home/caribou/git/quividi/test/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
$ pip freeze
pkg-resources==0.0.0

Menggunakan pip versi virtualenv yang terinstal bisa menjadi solusi yang bisa diterapkan:

$ sudo apt -y purge python3-virtualenv virtualenv tox
$ pip install virtualenv
$ virtualenv .
pip install virtualenv
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/c5/97/00dd42a0fc41e9016b23f07ec7f657f636cb672fad9cf72b80f8f65c6a46/virtualenv-16.7.7-py2.py3-none-any.whl (3.4MB)
    100% |████████████████████████████████| 3.4MB 351kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.7.7
$ virtualenv .
New python executable in /home/caribou/git/quividi/test/bin/python
Installing setuptools, pip, wheel...
done.
$ source bin/activate
$ pip freeze
$

hth, ... Louis

panxogol
sumber
-2

Di Ubuntu, Anda dapat memperbaikinya dengan menghapus virtualenvpaket Ubuntu dan menginstal versi baru dari pip:

sudo apt remove virtualenv
sudo pip install -U virtualenv
ahmed
sumber