Setiap kali saya mencoba untuk menginstal paket menggunakan pip, saya mendapatkan ini impor error:
guru@guru-notebook:~$ pip3 install numpy
Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
from pip import main
ImportError: cannot import name 'main'
guru@guru-notebook:~$ cat `which 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())
Itu bekerja dengan baik sebelumnya, saya tidak yakin mengapa hal ini melemparkan kesalahan ini. Saya telah mencari tentang kesalahan ini, tetapi dapat't menemukan apa-apa untuk memperbaikinya.
Tolong beritahu saya jika anda membutuhkan detail lebih lanjut, saya akan memperbarui pertanyaan saya.
Anda harus memiliki secara tidak sengaja meng-upgrade sistem anda pip (mungkin melalui sesuatu seperti sudo pip install pip-upgrade
)
pip 10.x menyesuaikan mana yang internal adalah terletak. The pip3
perintah anda're melihat adalah salah satu yang disediakan oleh pengelola paket (mungkin debian berbasis di sini?) dan bukan file yang dikelola oleh pip.
Anda dapat membaca lebih lanjut tentang hal ini pada pip's issue tracker
Anda'll mungkin ingin not meng-upgrade sistem anda pip dan bukannya menggunakan virtualenv.
Untuk memulihkan pip3
biner anda'll perlu sudo python3 -m pip uninstall pip && sudo apt-get install python3-pip-ulang
.
Jika anda ingin terus di "tidak didukung wilayah" (upgrade sistem paket luar sistem package manager), anda mungkin dapat lolos dengan python3 -m pip ...
bukan pip3
.
Kesalahan dapat diatasi dengan memodifikasi pip file
Cek lokasi dari file:
$ which pip
jalan -> /usr/bin/pip
Pergi ke lokasi itu /usr/bin/pip
dan buka terminal.
Masukkan: $ sudo nano pip
Anda dapat melihat:
from pip import main
if __name__ == '__main__':
sys.exit(main())
Perubahan ke:
import sys
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
kemudian Pilih + O menulis perubahan dan keluar.
Berharap ini akan lakukan!!
Terima kasih untuk Anthony's penjelasan atas, anda dapat mempertahankan sistem yang asli pip (di /usr/bin/ dan dist-paket/) dan menghapus secara manual-instal pip (di ~/.lokal/) untuk menyelesaikan konflik:
$ python3 -m pip uninstall pip
Ubuntu/Debian pip v8.1.1 (16.04) dari python3-pip
paket debian (lihat$ pip3 -V
) menunjukkan hasil pencarian yang sama seperti yang terbaru pip v10.0.1, dan menginstal modul terbaru dari PyPI baik-baik saja. Ia telah bekerja pip
perintah (sudah di $PATH), plus bagus --pengguna
pilihan ditambal-dalam secara default sejak 2016. Melihat pip catatan rilis, versi yang lebih baru yang sebagian besar tentang penggunaan-kasus tertentu perbaikan bug dan beberapa fitur baru, sehingga tidak setiap orang harus buru-buru upgrade pip saja belum. Dan baru pip 10 dapat digunakan untuk Python virtualenvs, sih.
Tapi terlepas dari pip, OS anda memungkinkan untuk cepat menginstal umum Python modul (termasuk numpy) dengan APT-get, tanpa perlu pip, misalnya:
$ sudo apt-get install python3-numpy python3-scipy
(dengan sistem dependensi)
$ sudo apt-get install python3-pip
(Debian-patched pip, yang sedikit lebih tua, tapi itu doesn't peduli)
Cepat apt sintaks pengingat (silakan lihat
man apt
untuk rincian):$ sudo apt-get update
(untuk resync paket Ubuntu file indeks dari up-to-date sumber)$ apt pencarian <python-paket-nama>
(full-teks pencarian pada semua paket yang tersedia)$ apt show <python-paket-nama>
(menampilkan detil deskripsi paket)$ sudo apt-get install <python-paket-nama>
Paket nama-nama yang diawali denganpython-
adalah untuk Python 2; dan diawali denganpython3-
adalah untuk Python 3 (misalnya python3-panda). Ada ribuan, dan mereka menjalani pengujian integrasi dalam Debian dan Ubuntu. Kecuali jika anda mencari untuk menginstal di per-tingkat pengguna (pip install-pengguna
option) atau dalam virtualenv/venv, apt bisa menjadi apa yang anda butuhkan. Ini paket sistem dapat diakses dari virtual envs juga, karena virtualenv anggun akan kembali menggunakan sistem libs pada impor jika anda envs don't telah diberikan salinan dari modul. Kustom anda-instal (dengan pip--user
) per-user modul dalam~/.local/lib
akan menimpa mereka juga. Perhatikan, karena ini adalah system-wide instalasi, anda'd jarang perlu untuk menghapus mereka (perlu berhati-hati tentang OS dependensi). Ini adalah perangkat untuk paket dengan banyak sistem dependensi (seperti dengan scipy atau matplotlib), seperti APT akan melacak dan memberikan semua yang dibutuhkan sistem libs dan C ekstensi, sedangkan dengan pip yang harus anda tidak ada jaminan seperti itu. Pada kenyataannya, untuk sistem paket Python (berbeda dengan per-user, dir rumah tingkat, atau lebih rendah), Ubuntu berharap menggunakan APT manajer paket (bukansudo pip
) untuk menghindari melanggar OS:sudo pip3
target yang sama/usr/lib/python3/dist-paket
direktori dimana APT toko OS-sensitif modul. Baru-baru Debian/Ubuntu rilis sangat bergantung pada Python 3, jadi pra-instal modul yang dikelola olehapt
dan tidak't dapat diubah. Jadi jika anda menggunakanpip3 install
perintah, pastikan bahwa hal itu berjalan di virtual yang terisolasi dev lingkungan, seperti dengan virtualenv (sudo apt-get install python3-virtualenv
), atau dengan Python3 built-in (-m venv
), atau pada per-tingkat pengguna (--user
pip opsi default di Ubuntu-disediakan pip sejak 2016), tetapi tidak sistem-lebar (tidak pernahsudo pip3
!), karena pip mengganggu dengan operasi APT package manager dan dapat mempengaruhi Ubuntu OS komponen ketika sistem menggunakan modul python tiba-tiba berubah. Good luck!
P. S. Semua di atas adalah untuk 'pilihan' solusi (Debian/Ubuntu way). Jika anda masih ingin menggunakan baru pip3 v10 eksklusif, ada 3 cepat:
bash
) - dan pip3 v10 menjadi tersedia (lihat pip3 -V
). debian's pip3 v8 tetap terpasang tapi rusak; atau $ hash -d pip3 && pip3 -V
untuk me-refresh pip3 path di $PATH. debian's pip3 v8 tetap terpasang tapi rusak; atau $ sudo apt-get remove python3-pip && hash -d pip3
untuk menghapus instalasi debian's pip3 v8 benar-benar, dalam mendukung anda baru pip3 v10.
Catatan: Anda akan selalu perlu untuk menambahkan - pengguna
bendera untuk setiap non-debian-disediakan pip, kecuali anda berada di sebuah virtualenv! (itu menyebarkan paket python untuk ~/.lokal/
, default pada debian/ubuntu-disediakan python3-pip dan python-pip sejak 2016). Penggunaan pip 10 sistem-lebar, di luar virtualenv, tidak benar-benar didukung oleh Ubuntu/Debian. Tidak pernah sudo pip3
!
Rincian lebih lanjut:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100 diselesaikan dalam satu langkah saja.
Saya juga menghadapi masalah ini, Tapi hal ini dapat diatasi hanya dengan 1 perintah tanpa mengganggu sekitar dan membuang-buang waktu dan saya telah mencoba pada beberapa sistem it's terbersih solusi untuk masalah ini. Dan yang's:
Untuk python3:- sudo python3 -m pip uninstall pip && sudo apt-get install python3-pip-ulang
.
Dengan ini , anda hanya dapat menginstal paket-paket menggunakan pip3
. untuk memeriksa penggunaan pip3 --version
.
Untuk versi yang lebih tua, menggunakan : sudo python -m pip uninstall pip && sudo apt-get install python-pip-ulang
.
Dengan ini, sekarang anda dapat menginstal paket-paket menggunakan pip
. untuk memeriksa penggunaan pip --version
.
Gunakan python -m pip menginstal
bukan pip menginstal
Contoh:
python -m pip install --user somepackage
python3 -m pip install --user somepackage
The pip
(resp. pip3
) eksekusi disediakan oleh distro (python-pip
paket di Ubuntu 16.04) dan terletak di /usr/bin/pip
.
Oleh karena itu, hal ini tidak disimpan up-to-date dengan pip
paket sendiri saat anda meng-upgrade pip, dan bisa pecah.
Jika anda hanya menggunakan python -m pip
secara langsung, misalnya seperti dalam:
python -m pip install --user somepackage
python3 -m pip install --user somepackage
ia pergi melalui Python path dan menemukan versi terbaru dari pip, dan mengeksekusi file tersebut.
Hal ini bergantung pada kenyataan bahwa file executable melalui impor
, tapi itu adalah tipe standar antarmuka, dan karena itu lebih mungkin untuk istirahat dari hackier Debian script.
Maka saya sarankan menambahkan alias berikut untuk anda .bashrc
:
pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )
Diuji pada Ubuntu 16.04 setelah update dari pip3
9.0.1 18.0.
Anda dapat mengatasi masalah ini dengan menginstal ulang pip.
Gunakan salah satu perintah berikut baris perintah untuk menginstal pip:
Python2:
python -m pip uninstall pip && sudo apt install python-pip --reinstall
Python3:
python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
Periksa apakah pip telah di-cache pada jalan lain, untuk melakukannya, hubungi $ yang pip dan memeriksa bahwa jalan yang berbeda dari yang diminta dalam kesalahan, jika yang's kasus jalankan:
$ hash -r
Ketika cache yang jelas, pip akan bekerja lagi. referensi: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory
I'm berjalan pada sebuah sistem di mana saya memiliki sudo apt tapi tidak sudo pip. (Dan tidak ada su akses.) Aku mendapatkan diriku ke dalam situasi yang sama dengan mengikuti saran dari pip:
Anda menggunakan pip versi 8.1.1, namun 18.0 tersedia. Anda harus mempertimbangkan upgrade melalui 'pip install-upgrade pip' perintah.
Tidak ada perbaikan lainnya bekerja untuk saya, karena saya don't memiliki cukup hak istimewa admin. Namun, beberapa hal yang terjebak dengan saya dari membaca buku ini:
Jadi, saya menemukan baris perintah ini bekerja untuk mengembalikan saya kembali ke tempat saya. Jika anda menggunakan versi yang berbeda dari 8.1.1, anda jelas akan ingin mengubah itu bagian dari baris.
python -m pip install --force-reinstall pip==8.1.1 --user
Yang's satu-satunya hal yang bekerja untuk saya, tapi itu bekerja dengan sempurna!
Hal yang sama terjadi padaku pada Pixelbook menggunakan baru LXC (strech). Solusi ini sangat mirip dengan yang diterima, dengan satu perbedaan yang halus, whiched tetap pip3 bagi saya.
sudo python3 -m pip install --upgrade pip
Yang menabrak versi, dan sekarang bekerja seperti yang diharapkan.
Saya menemukan itu di sini ... Python.org: Memastikan pip up-to-date
Perintah di atas tidak't bekerja untuk saya, tapi mereka sangat membantu:
sudo apt purge python3-pip
sudo rm -rf '/usr/lib/python3/dist-packages/pip'
sudo apt install python3-pip
cd
cd .local/lib/python3/site-packages
sudo rm -rf pip*
cd
cd .local/lib/python3.5/site-packages
sudo rm -rf pip*
sudo pip3 install jupyter
Di ubuntu 18.04.1 Bionic berang-Berang, anda harus log out dan login kembali (restart tidak perlu) untuk mendapatkan lingkungan yang tepat.
$ sudo apt install python-pip
$ pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ pip install --upgrade pip
$ pip --version
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main
$ exit
<login>
$ pip --version
pip 18.1 from /home/test/.local/lib/python2.7/site-packages/pip (python 2.7)
Saya menggunakan sudo apt-get remove python3-pip
kemudian pip
bekerja.
~ sudo pip install pip --upgrade
[sudo] password for sen:
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name 'main'
➜ ~ sudo apt remove python3-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libexpat1-dev libpython3-dev libpython3.5-dev python-pip-whl python3-dev python3-wheel
python3.5-dev
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
python3-pip
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 569 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 215769 files and directories currently installed.)
Removing python3-pip (8.1.1-2ubuntu0.4) ...
Processing triggers for man-db (2.7.5-1) ...
➜ ~ pip
Usage:
pip <command> [options]
Apa yang bekerja untuk saya untuk memperbaiki kesalahan dengan menggunakan pip3
adalah:
sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3
Semuanya bekerja:
demon@UbuntuHP:~$ pip -V
pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)
demon@UbuntuHP:~$ pip2 -V
pip 10.0.1 from /home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)
demon@UbuntuHP:~$ pip3 -V
pip 10.0.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)
Mungkin baru 10.0.1 versi pip doesn't update biner di /usr/bin ? (yang tampaknya tidak)
EDIT: masalah yang sama terjadi di Ubuntu 18.04. Solusi terbaik saya've ditemukan adalah untuk symlink pip binari dari /home/<user/.local/bin
ke /usr/local/bin atau/usr/bin
(tergantung pada preferensi anda), sebagai berikut:
``bash
ln-sv /home/
` **CATATAN:** mengganti
Terkait versi (terbaru) di:
/home/setan/.local/lib/python3.6/site-packages/pip (python 3.6)
/home/setan/.local/lib/python2.7/site-packages/pip (python 2.7)
Untuk apa itu's worth, saya punya masalah dengan pip
(bukan pip2
atau pip3
):
$ pip -V
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main
$ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$ pip3 -V
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)
Entah bagaimana (I can't ingat bagaimana) aku punya python sudah terinstal di ~/.lokal
direktori. Setelah saya dihapus pip direktori dari sana, pip
mulai bekerja lagi.
$ rm -rf /home/precor/.local/lib/python2.7/site-packages/pip
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)