<p>pip v10 memecah perintah pip3 Debian/Ubuntu</p>

Dibuat pada 14 Apr 2018  ·  42Komentar  ·  Sumber: pypa/pip

Catatan pengelola: Siapa pun yang masih mengalami masalah ini, silakan lihat #5599.


  • Versi pip: 10.0.0
  • Versi Python: 3.5.2
  • Sistem operasi: Ubuntu 16.04 (EDIT: diuji pada debian:9.4 juga, hal yang sama terjadi)

Keterangan:

Saat memutakhirkan pip (ke v10) pada setidaknya Ubuntu 16.04, perintah pip3 berhenti bekerja ("tidak dapat mengimpor utama", lihat di bawah). Ini pada instalasi baru.

Apa yang saya jalankan:

(Perhatikan bahwa saya telah menghapus semua output apt dll., karena saya pikir itu tidak diperlukan di sini. Beri tahu saya jika Anda masih menginginkannya!)

me@host$ sudo docker run -it ubuntu:xenial

root@container# apt update && apt install python3-pip

root@container# pip3 --version
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

root@container# pip3 install --upgrade pip
Collecting pip
  Downloading pip-10.0.0-py2.py3-none-any.whl (1.3MB)
    100% |################################| 1.3MB 1.4MB/s 
Installing collected packages: pip
  Found existing installation: pip 8.1.1
    Not uninstalling pip at /usr/lib/python3/dist-packages, outside environment /usr
Successfully installed pip-10.0.0

root@container# pip --version
pip 10.0.0 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

root@container# pip3 --version
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'

root@container# cat /usr/bin/pip3
#!/usr/bin/python3
# GENERATED BY DEBIAN

import sys

# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import main
if __name__ == '__main__':
    sys.exit(main())

Tidak yakin apakah ini sesuatu yang harus diperbaiki di sisi pip atau di sisi Debian.

downstream

Komentar yang paling membantu

Kami memecahkan masalah ini dengan menghapus hash di bash:

$ hash -d pip

Atau di tanda hubung (sh):

$ hash -r pip

Semua 42 komentar

itu masalah debian

dengan catatan tambahan - mengganti pip sistem menggunakan pip selalu merupakan tindakan vandalisme sistem di mana yang menyebabkannya bertanggung jawab atas kejatuhannya

Saya sarankan Anda harus menunggu salinan paket pip 10 yang tepat dari Debian - seperti yang dikatakan @RonnyPfannschmidt , Anda tidak boleh menggunakan pip untuk memutakhirkan paket sistem Anda...

Sepertinya skrip pip3 Debian menggunakan internal pip, jadi mendapatkan perbaikan yang kompatibel dengan pip10 pasti terserah mereka (dan saya sepenuhnya mengharapkan mereka untuk menunggu merilis paket pip10 mereka sampai mereka menyortirnya).

dengan catatan tambahan - mengganti pip sistem menggunakan pip selalu merupakan tindakan vandalisme sistem di mana yang menyebabkannya bertanggung jawab atas kejatuhannya

Yakinkan orang-orang debian/ubuntu untuk bukan vendor dan kemudian biarkan membusuk setengah paket mereka, dan itu akan menjadi argumen yang valid.

Anda dapat menggunakan virtualenv atau venv untuk mengisolasi diri Anda dari instalasi pip sistem.

Anda tidak boleh memodifikasi file yang dikelola manajer paket (di sini instalasi pip sistem) -- Saya pikir mereka tidak mengharapkan pengguna untuk mengubah sesuatu -- kemungkinan tidak didukung oleh Debian. Pasti akan menimbulkan masalah seperti ini.

Masalah yang sama di Fedora juga.

Mungkin harus ada saluran "beta", atau mekanisme serupa bagi orang untuk melakukan lebih banyak pengujian sebelum rilis, daripada hanya membuang versi yang rusak di pypi dan menyebabkan semua bangunan meledak.

@fake-name Ada dua pra-rilis yang dibuat:

@fake-name tambahan saran umum untuk penggunaan di semua distro adalah - gunakan virtualenv, jangan merusak sistem, dan itu berfungsi - orang hanya mengikuti font dan kemudian bertanya-tanya kapan barang rusak dan salahkan pip

ada banyak pengujian manual dan otomatis dengan virtualenvs yang berfungsi

juga di virtualenv setidaknya tidak boleh ada perintah pip3 buatan debian - jadi apa yang Anda bicarakan tentang kerusakan ini di virtualenvs - berikan cukup data untuk benar-benar memverifikasi alih-alih mengeluh tentang kerusakan tanpa memberikan data yang diperlukan untuk memverifikasinya

pip digerakkan oleh sukarelawan, bukan perusahaan dengan puluhan karyawan

~Dihapus~. membingungkan ini dengan https://github.com/pypa/pip/issues/5220

Saya seorang derp.

Terima kasih, tidak menyadari bahwa mengganti pip sistem adalah ide yang buruk tetapi masuk akal. Namun, akan lebih baik UX jika pip tidak mengomel tentang peningkatan dalam kasus itu. Apakah itu mungkin? Saya rasa banyak orang (termasuk saya) hanya akan melakukan apa pun "hal" yang mereka minta.

@fake-name terima kasih telah menindaklanjuti - sangat umum terjadi ketidakcocokan masalah detail ketika rilis besar memiliki dampak multi-segi dan sebagian mencoba merusak hari Anda

itu akan menjadi UX yang baik jika pip tidak akan mengomel tentang peningkatan dalam kasus itu

Vendor distribusi pasti dapat menambal pip untuk menghapus peringatan itu (atau lebih baik, menggantinya dengan pemeriksaan serupa terhadap paket sistem) bersama dengan tambalan lain yang mereka buat. Saya tidak yakin bagaimana pip dasar dapat mendeteksi bahwa itu berjalan dari instalasi paket sistem tanpa kerja sama dari distribusi, tetapi jika ada cara untuk melakukannya, itu adalah sesuatu yang dapat kami pertimbangkan (tetapi perlu diketahui bahwa dalam pengalaman saya, kami mendapatkan sebagai banyak umpan balik negatif dari kesalahan heuristik seperti yang kami lakukan karena tidak menyertakan heuristik sama sekali ...)

Selalu lebih suka "python3 -m pip" daripada pip3" atau bahkan lebih baik "/usr/bin/env python3 -m pip" lebih aman dan memungkinkan untuk menghindari masalah ini dengan pip10

Kami memecahkan masalah ini dengan menghapus hash di bash:

$ hash -d pip

Atau di tanda hubung (sh):

$ hash -r pip

Juga tekan masalah ini saat membuat gambar buruh pelabuhan.

@RonnyPfannschmidt mengatakan "mengganti pip sistem menggunakan pip selalu merupakan tindakan vandalisme sistem di mana yang menyebabkannya bertanggung jawab atas kejatuhannya", yang mendapat 6 jempol. Saya menemukan ini sebagai komentar yang sangat tumpul mengingat saya menginstruksikan untuk melakukannya dengan pip itu sendiri:

_Anda menggunakan pip versi 8.1.1, namun versi 10.0.0 tersedia.
Anda harus mempertimbangkan untuk memutakhirkan melalui perintah 'pip install --upgrade pip'._

Jika ada validitas untuk komentar itu, maka pembuat pip harus menghapus pesan ini dan saya akan mendorong @RonnyPfannschmidt untuk mengangkat masalah seperti itu dan membuat kasusnya.

@qacollective - Saya pikir argumen di sini adalah bahwa distro telah mengambil pip, memodifikasinya, dan mengemasnya kembali ke dalam repositori mereka. Dengan demikian, bukan salah Pypi pesan itu masih ada.

Sebagian besar ini karena sekelompok distro berusaha sangat keras untuk mengemas ulang semuanya ke dalam repositori paket mereka sendiri. Sebagian besar, hal-hal kemudian dibiarkan membusuk.

Secara pribadi, setidaknya untuk python di ubuntu, saya berharap mereka berhenti. Versi pada dasarnya setiap paket python di apt berkisar dari sangat, sangat tua hingga fosil. Apt pada dasarnya tidak berguna untuk python, IMHO.


FWIW, saya cenderung menemukan opsi terbaik adalah tidak pernah menginstal pip distro sejak awal, tetapi menginstalnya secara manual melalui get-pip.py . Dengan begitu, Anda tidak memiliki masalah dengan pengelola paket platform yang hanya mengetahui beberapa paket python.

Selalu gunakan --user untuk menghindari mematikan sistem Anda

/usr/bin/env python3 -m pip intall --user --upgrade pip

Harus menangani sebagian besar kasus buggy dan menghasilkan versi pip yang tepat dipasang di ˜/.local/bin .

Saya dapat mengonfirmasi bahwa solusi

Sedikit latar belakang: Setelah pemutakhiran (pip install -U pip) pada Vanilla ubuntu 16.04 (AWS AMI) seseorang sampai pada situasi berikut:
$PATH=..:/usr/local/ bin:... :/usr/ bin:...
/usr/bin/pip masih versi lama/'oem' (rusak)
/usr/local/bin/pip adalah skrip v10 baru (berfungsi dengan baik saat dipanggil secara langsung)

Meskipun versi pip yang tepat mendahului yang rusak di PATH, bash masih mengingat yang lama, jadi ketika Anda memanggilnya hanya sebagai 'pip', Anda akan menjalankan yang lama dan rusak. hash-d pip atau hash -r memecahkan masalah.

Pertama, beberapa catatan tentang apa yang terjadi di Debian/Ubuntu (dan kemungkinan beberapa Distro Linux lainnya):

  • pip tidak mendukung penggunaan internalnya dengan mengimpornya. Lebih lanjut tentang itu dalam dokumentasi di sini .
  • Debian (karenanya Ubuntu) tidak mendukung modifikasi file yang dikelola manajer paket mereka menggunakan sesuatu, itu bukan manajer paket mereka.

Masalah ini disebabkan oleh, yah, keduanya dilanggar.

  • Debian menggunakan metode internal pip (yang tidak lagi berfungsi karena reorganisasi internal pip). Debian berasumsi di sini bahwa versi pip di repositori mereka adalah versi yang akan diinstal.
  • Menjalankan pip install --upgrade pip , sebagai root, tanpa parameter lain mengubah file yang seharusnya dikelola oleh apt, yang merusak skrip oleh Debian.

Beberapa tip umum di Linux:

  • Merupakan kebiasaan yang baik untuk menggunakan --user kapan pun di luar venv.

    pip install --upgrade --user pip
    
  • Jangan pernah menjalankan pip dengan Sudo kecuali Anda tahu apa yang Anda lakukan.


Apa solusinya?

@standag 's solusi berguna saat ini disebabkan oleh caching bash executable.

hash -r pip # or hash -d pip

Jika Anda telah memodifikasi instalasi pip manajer paket OS Anda (misalnya dengan menggunakan sudo pip ) dan python -m pip masih berfungsi, salah satu solusinya adalah menghapus instalan versi pip yang diinstal dan menginstal ulang versi yang diinstal manajer paket .

python -m pip uninstall pip  # this might need sudo
sudo apt install --reinstall python-pip

Jika Anda tidak menggunakan Debian/Ubuntu _and_ pip rusak untuk Anda, coba jalankan:

python -m pip install --force-reinstall pip

Jika hal di atas tidak menyelesaikan masalah Anda, harap ajukan masalah baru.


[diedit oleh @pradyunsg : membuatnya lebih relevan untuk menghubungkan semua orang dengan masalah serupa ke komentar ini; perbarui saran untuk menyertakan solusi mencopot/menginstal ulang]

Bagaimana dengan menyelesaikannya di luar buruh pelabuhan? Itu rusak di sistem reguler saya dan perintah hash tidak mengenali pip.
thinkdigital@thinkdigital-HP-Spectre-x360-Convertible:~$ hash -d pip bash: hash: pip: not found

Saya menemukan pip3, versi 9.0.1 diinstal di virtualenv dari sebuah proyek dan menyalinnya ke /usr/bin saya dan berfungsi lagi. Berikut adalah isi dari pip3 yang dapat dieksekusi bagi mereka yang ingin memperbaikinya sendiri juga.

# -*- coding: utf-8 -*-
import re
import sys

from pip import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

Saya yakin yang harus Anda lakukan adalah menyimpannya ke file bernama pip3, membuatnya dapat dieksekusi dengan menjalankan Sudo chmod +x ./pip3, jalankan Sudo apt remove python3-pip, lalu salin ke direktori bin dengan menjalankan Sudo cp ./pip3 /usr/bin.
Ini file mentahnya bagi yang hanya ingin mengunduh dan memindahkannya.
pip3.zip

Ini bekerja untuk saya:
curl https://bootstrap.pypa.io/get-pip.py | sudo python

Maaf, tapi saya ingin menunjukkan bahwa menjalankan kode python curl'd dari beberapa situs web dengan akses root sangat tidak aman.

Setuju, dan saya harus menunjukkan bahwa ini bukan rekomendasi pip resmi. Seperti yang telah dinyatakan beberapa kali, Anda harus menggunakan manajer paket sistem Anda untuk memperbarui atau mengelola instalasi pip sistem Anda, bukan get-pip, atau bahkan pip sendiri melalui sudo.

Dalam hal ini versi dari manajer paket sistem tidak berfungsi. Bahkan
setelah purging dan install ulang.

Pada Thu, Apr 19, 2018, 01:53 Paul Moore [email protected] menulis:

Setuju, dan saya harus menunjukkan bahwa ini bukan pip resmi
rekomendasi. Seperti yang telah dinyatakan beberapa kali, Anda harus menggunakan
manajer paket sistem Anda untuk memperbarui atau mengelola pip sistem Anda
instalasi, bukan get-pip, atau bahkan pip sendiri melalui Sudo.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/pypa/pip/issues/5221#issuecomment-382660881 , atau bisukan
benang
https://github.com/notifications/unsubscribe-auth/AV-Hfecz8l1NEyq3vsih0DpNP7QYdxuvks5tqFCdgaJpZM4TVEq6
.

Jika menginstal ulang paket sistem masih tidak berhasil, periksa apakah Anda memiliki pip10 di suatu tempat di /usr/local/ dan hapus seluruh folder.

Mengganti yang dari /usr/bin berhasil untuk saya meskipun saya PIKIR itu
yang diinstal oleh manajer paket sistem.

[ @pradyunsg memotong konten email]

@ThinkDigitalRepair Apakah berikut ini membantu?

Dalam kasus lain, Anda ingin melewatkan --user saat menginstal/memperbarui paket. TBH, di Linux, adalah kebiasaan yang baik untuk menggunakan --user .

pip install --upgrade --user pip

Baik. Terima kasih. Saya mengacaukannya mengikuti tutorial Notebook Jupyter dari mereka
situs yang memberitahu Anda untuk meng-upgrade pip secara langsung. Menyalin dan menempel tanpa
mengetahui konsekuensi menyerang lagi. :(

[ @pradyunsg memotong konten email]

@ThinkDigitalRepair pip 10 mudah-mudahan akan meningkatkan banyak hal - ini mencetak pesan kesalahan yang lebih baik daripada PermissionError yang panjang ketika ini terjadi.

Menutup masalah ini sekarang karena tidak ada yang dapat ditindaklanjuti di sini dari ujung pip.

Siapa pun yang mencari cara memperbaiki/menyelesaikan masalah ini, silakan lihat https://github.com/pypa/pip/issues/5221#issuecomment -382069604.

@pradyunsg dalam banyak kasus solusi yang diberikan dalam komentar itu tidak akan berfungsi. Di bawah Ubuntu 17.10 yang baru, jalankan pip install --upgrade pip : setelah itu perintah pip akan rusak, dan solusi dari komentar tidak akan memperbaikinya. Dan mereka tidak seharusnya!

Memiliki sistem yang menginstal pip 9 dengan pengguna yang menginstal pip 10, membuat skrip pip sistem mencoba mengimpor main() dari pengguna pip 10, dengan jalur impor yang salah. Hash -r atau -d tidak akan memperbaikinya karena perintah pip akan tetap menjalankan pip sistem secara default. Dan juga tidak akan memperbaikinya dengan memutakhirkan pip pengguna, karena pip sistem akan tetap 9, pip pengguna akan tetap 10, sehingga impor akan terus gagal.

Solusi untuk kasus tersebut harus menghapus salah satu dari kedua pips.

  • python -m pip uninstall pip --user , menjaga pip sistem, yang lebih lama

atau

  • sudo apt remove python-pip dan tetap instal pip pengguna, yang tidak akan dapat diakses dengan menjalankan pip di terminal secara default. Anda harus menjalankannya dengan python -m pip , atau menambahkan jalur ke PATH env var Anda, dll.

Semua ini berlaku untuk keduanya, pip di bawah python 2 dan 3.

Pada semua sistem Ubuntu saya (16.04, 17.10. 18.04), saya memiliki sistem pip ke versi lama dan pengguna menggunakan pip 10 dan saya tidak pernah melihat kesalahan impor Anda.
Apakah Anda yakin Anda tidak memiliki pip sistem yang rusak?

@gsemet Anda mungkin menambahkan ~/.local/bin ke PATH env var Anda (atau mungkin menggunakan shell yang berbeda dan lebih pintar dari bash default), jadi ketika Anda menjalankan pip ia menggunakan skrip pip 10 yang diinstal pengguna, dan bukan sistem yang menginstal skrip pip 9. Di Ubuntu ini tidak seperti itu secara default. Itu bisa dilakukan, tentu saja, dan saya berharap itu datang seperti itu secara default. Tetapi secara default perintah pip akan memanggil pip yang diinstal sistem, bahkan jika Anda telah menginstalnya oleh pengguna.

Cara mereproduksi ini di bawah instalasi Ubuntu 17.10 yang baru, termasuk bukti bahwa perintah dalam komentar 5221 gagal untuk memperbaikinya, dan apa yang saya usulkan tidak memperbaikinya.

Instalasi kedua pips (sistem dan pengguna), yang memecah perintah pip:

vfisa<strong i="7">@vilos</strong>:~$ sudo apt install python-pip
(...)

vfisa<strong i="8">@vilos</strong>:~$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

vfisa<strong i="9">@vilos</strong>:~$ which pip
/usr/bin/pip

vfisa<strong i="10">@vilos</strong>:~$ pip install pip --upgrade --user
Collecting pip
  Downloading https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 631kB/s 
Installing collected packages: pip
Successfully installed pip-10.0.1

vfisa<strong i="11">@vilos</strong>:~$ pip
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

vfisa<strong i="12">@vilos</strong>:~$ python -m pip --version
pip 10.0.1 from /home/vfisa/.local/lib/python2.7/site-packages/pip (python 2.7)

vfisa<strong i="13">@vilos</strong>:~$ which pip
/usr/bin/pip

Seperti yang Anda lihat, perintah pip menunjuk ke pip sistem secara default, bukan yang diinstal pengguna.

Perintah dari komentar yang direferensikan, buktinya tidak memperbaiki masalah:

vfisa<strong i="19">@vilos</strong>:~$ hash -r

vfisa<strong i="20">@vilos</strong>:~$ pip
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

vfisa<strong i="21">@vilos</strong>:~$ hash -d
hits    command
   1    /usr/bin/pip

vfisa<strong i="22">@vilos</strong>:~$ pip
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

vfisa<strong i="23">@vilos</strong>:~$ python -m pip install pip --force-reinstall --user
Collecting pip
  Using cached https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 10.0.1
    Uninstalling pip-10.0.1:
      Successfully uninstalled pip-10.0.1
Successfully installed pip-10.0.1

vfisa<strong i="24">@vilos</strong>:~$ pip
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

vfisa<strong i="25">@vilos</strong>:~$ which pip
/usr/bin/pip

Seperti yang Anda lihat, selama kedua pips diinstal dan perintah pip menunjuk ke pip sistem (perilaku default di Ubuntu), masalah akan tetap ada.

Perbaiki opsi 1:

Hapus pip sistem, pertahankan pip pengguna, yang secara default tidak dapat diakses melalui perintah pip (jadi Anda perlu menggunakan python -m pip ).

vfisa<strong i="34">@vilos</strong>:~$ sudo apt remove python-pip
(...)

vfisa<strong i="35">@vilos</strong>:~$ pip
bash: /usr/bin/pip: No such file or directory

vfisa<strong i="36">@vilos</strong>:~$ python -m pip --version
pip 10.0.1 from /home/vfisa/.local/lib/python2.7/site-packages/pip (python 2.7)

Anda dapat menambahkan ~/.local/bin ke PATH env var Anda, untuk dapat menggunakan perintah pip dengan pip pengguna.

Perbaiki opsi 2:

Hapus pip pengguna, pertahankan pip sistem, yang lebih lama tetapi secara default memiliki perintah pip berfungsi di jalurnya.

vfisa<strong i="45">@vilos</strong>:~$ python -m pip uninstall pip
Uninstalling pip-10.0.1:
  Would remove:
    /home/vfisa/.local/bin/pip
    /home/vfisa/.local/bin/pip2
    /home/vfisa/.local/bin/pip2.7
    /home/vfisa/.local/lib/python2.7/site-packages/pip-10.0.1.dist-info/*
    /home/vfisa/.local/lib/python2.7/site-packages/pip/*
Proceed (y/n)? y
  Successfully uninstalled pip-10.0.1
You are using pip version 9.0.1, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

vfisa<strong i="46">@vilos</strong>:~$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

@fisadev Tentu, itu diperlukan untuk mendukung paket 'pip install --user' yang dapat diinstal pengguna. Tapi saya pikir itu harus diberitahukan kepada pengguna "jika Anda ingin memaksa pembaruan ke pip 10 sebelum paket debian/ubuntu diperbarui, Anda perlu menggunakan pip install --user --upgrade pip dan memastikan $HOME/.local/bin ada di jalur Anda Ini sederhana untuk dilakukan.

@gsemet Saya setuju, pengguna harus diberitahu tentang persyaratan jalur. Ini tidak disebutkan dalam komentar yang dirujuk dari utas lain sebagai solusinya, dan dalam satu kasus diskusi dikunci bahkan setelah pengguna mengatakan bahwa dia menjalankan perintah itu dan itu tidak menyelesaikan masalah:/

@fisadev Terima kasih banyak. Perbaiki option1 sangat membantu.

@RonnyPfannschmidt

mengganti pip sistem menggunakan pip selalu merupakan tindakan vandalisme sistem di mana yang menyebabkannya bertanggung jawab atas kejatuhannya

adalah komentar vandalisme mental. Seolah-olah orang yang melakukan pemutakhiran (naif) dengan sengaja mengatur untuk merusak instalasi mereka sendiri... Jika demikian halnya, maka pip itu sendiri seharusnya tidak mengganggu pengguna untuk memutakhirkan dari 9.0.1 ke 10.0.1 dengan setiap perintah pip tunggal dieksekusi. Saya sendiri mengikuti rekomendasi itu dan berakhir dalam kekacauan ini.

Untung:
sudo python -m pip install pip==9.0.1
adalah obat yang cukup mudah.

Menyalahkan korban bukanlah jawaban.

Hei @batang-aplikasi!

Jika itu masalahnya, maka pip itu sendiri seharusnya tidak mengganggu pengguna untuk memutakhirkan dari 9.0.1 ke 10.0.1 dengan setiap perintah pip dijalankan.

Kami telah memperhatikan ini dan bekerja dengan vendor OS untuk menghindari ini di versi pip yang akan datang. -- #5346.

Untuk mengatasi masalah ini saya menjalankan ...

sudo geany -i /usr/bin/pip

...dan mengedit /usr/bin/pip yang disediakan debian untuk menggantikannya dengan...

#!/bin/sh
# GENERATED BY CEFN
python -m pip "$@"

dan yang setara untuk /usr/bin/pip3 (perhatikan ini memanggil python3 sebagai gantinya).

#!/bin/sh
# GENERATED BY CEFN
python3 -m pip "$@"

... yang mengembalikan fungsionalitas penuh pip meskipun versi 10 diinstal di paket situs saya. Saya kira ini akan berlangsung persis selama debian diperlukan untuk memperbaikinya, (atau memecahkannya kembali) dengan mengirimkan paket python-pip yang diperbarui. Mengapa mereka tidak menggunakan paket utama sejak awal saya tidak tahu.

Versi resmi

Versi pip yang dipasang di .local/bin/pip ditampilkan di bawah ini sedikit lebih menarik, dan menyertakan beberapa substitusi untuk menghapus ekstensi -script, .py, .pyw, dan .exe dari argumen yang diteruskan, tetapi saya tidak tahu apa fungsinya atau mengapa saya membutuhkannya jadi saya membiarkannya seperti di atas untuk kesederhanaan.

#!/usr/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from pip._internal import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

Saya menemukan penyebab yang tidak terkait dari masalah pip v10 ini. Saat memutakhirkan pip menggunakan pip sistem yang sangat lama (v1.5.6 pada Debian Jessie, yaitu oldstable) yang --system adalah default, saya perhatikan bahwa skrip yang salah diinstal, misalnya /usr/local/bin/pip berisi from pip import main -- yang saya temukan dengan melihat file. Saya berasumsi ini karena pip lama (atau mungkin paket instalasi yang digunakannya) salah menginstal file .whl.

python -m pip install --force-reinstall pip memperbaiki ini.

5599 memberikan informasi dan menyediakan satu lokasi untuk mencari bantuan guna menyelesaikan masalah ini bagi pengguna akhir.

Bagian komentar dari masalah itu terbuka bagi pengguna untuk mendiskusikan masalah dan solusi khusus. :)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat