Menjalankan Pip3 ImportError: tidak dapat mengimpor nama 'utama'

21

Saya ingin menginstal Scipy (sudah memiliki Numpy diinstal). Saya memiliki Python 3.5.1-3 diinstal dengan OS dan IDLE3 (3.5.2). Ketika saya menekan terminal

sudo pip3 install scipy

Mencetak

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

Saya sudah mencoba menginstal ulang pip3 dan restart OS, tetapi tidak berubah. Apakah pip3 bekerja aneh dengan orang lain?

Anjing Hog yang Dapat Terbalik
sumber

Jawaban:

10

numpy dan scipy berada dalam repositori default semua versi Ubuntu yang saat ini didukung. Untuk menginstal numpy dan scipy untuk Python 3.x buka terminal dan ketik:

sudo apt update    
sudo apt install python3-numpy python3-scipy  

Untuk Python 2.x itu:

sudo apt update  
sudo apt install --no-install-recommends python2.7-minimal python2.7 # this line is only necessary for Ubuntu 17.10 and later 
sudo apt install python-numpy python-scipy
karel
sumber
1
python3-scipy bekerja dengan baik. Terima kasih!
The Inogible Hog Dog
1
Seperti yang dinyatakan oleh jawaban lain, jawaban ini tidak terkait dengan masalah mendasar, yang berkaitan dengan pip.
cjauvin
Ini metode yang buruk ...
darkwoolf
26

Gunakan python -m pip installsebagai gantipip install

Contoh:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

Saya mulai mendapatkan masalah ini setelah pippeningkatan:

pip install --upgrade --user pip

The pip(resp. pip3) Executable disediakan oleh distro Anda ( python-pippaket pada Ubuntu 16.04).

Oleh karena itu, ini tidak selalu diperbarui dengan pippaket itu sendiri saat Anda meningkatkan pip, dan mungkin rusak.

Jika Anda hanya menggunakan python -m pipsecara langsung, misalnya dalam:

python -m pip install --user somepackage
python3 -m pip install --user somepackage

ia melewati jalur Python Anda dan menemukan versi terbaru dari pip, dan mengeksekusi file itu.

Itu bergantung pada fakta bahwa file itu dapat dieksekusi, tetapi itu adalah tipe antarmuka yang sangat standar, dan karena itu lebih kecil kemungkinannya untuk rusak daripada skrip Debian yang lebih rumit.

Maka saya sarankan menambahkan alias berikut ke .bashrc:

pip() ( python -m pip "$@" )
pip3() ( python3 -m pip "$@" )

File Ubuntu 18.04 /usr/bin/pip3tidak:

from pip import main

dan mungkin maintelah dihapus dari pipbeberapa titik yang merupakan hal yang merusak.

Commit pemecah pip tampaknya: 95bcf8c5f6394298035a7332c441868f3b0169f4 "Pindahkan semua API internal ke pip._internal" yang masuk ke pip 18.0.

Diuji di Ubuntu 16.04 setelah pembaruan dari pip39.0.1 ke 18.0.

Pyenv

Namun pada akhirnya, untuk pengembangan Python yang serius, saya hanya menyarankan Anda menginstal Python lokal Anda sendiri dengan pyenv + virtualenv, yang juga dapat mengatasi bug Ubuntu ini: Bagaimana cara menginstal versi Python yang berbeda menggunakan apt-get?

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
1
Jadi ini berhasil, tetapi saya tidak bisa menjadi satu-satunya yang menggelengkan kepala di sini. Di mana gangguannya? Mengapa pemutakhiran pip default gagal mengatur pip baru dengan cara yang terus bekerja?
Steven Lu
@StevenLu pengertian saya adalah yang /usr/bin/pipdisediakan oleh paket Ubuntu Python, dan piptidak menimpanya. Tetapi pip updatedikelola dengan pipsendirinya, dan menghindari menyentuh file Ubuntu.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Hai pengalaman yang sama di sini. Pip3 TIDAK akan bekerja apa pun yang saya lakukan. Solusi ini berfungsi, tetapi bagaimana bisa ?? Skrip python pip disiapkan oleh Debian--The komentar mengatakan: 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. Mungkin ada cara untuk menginstal Python dengan benar dalam cara python.
Akan
@Apakah saya tidak yakin tentang komentar dokumentasi itu, tetapi saya yakin apa kodenya /usr/bin/pip:-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
20

Bug ditemukan di pip 10.0.0.

Di linux Anda perlu memodifikasi file: / usr / bin / pip dari:

from pip import main
if __name__ == '__main__':
    sys.exit(main())

untuk ini:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())
Herman
sumber
Gaya penyelesaian ini sepertinya tidak direkomendasikan oleh piptim.
jdk1.0
Kamu menyelamatkan hariku !!
Saurabh Singh
8

Saya memiliki masalah yang sama, tetapi menghapus dan menginstal ulang dengan apt dan pip tidak bekerja untuk saya.

Saya melihat solusi lain yang menyajikan cara mudah untuk memulihkan jalur pip3:

sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
Hamza Ali
sumber
Ini menurunkan versi pip3 saya dari 19.0.3 ke 8.1.1, tetapi itu memperbaiki gejalanya.
Hawkeye Parker
6

Walaupun karel mungkin telah memecahkan masalah "install numpy and scipy" Anda, apa yang salah dengan pip pada sistem Anda belum diatasi, jadi Anda mungkin akan memiliki lebih banyak masalah dengan pip yang akan datang.

Mencari di sini , tampaknya menjadi masalah terakhir yang cukup umum dengan pip 10 pada sistem Ubuntu. Anda mungkin menemukan beberapa masalah di utas yang sesuai untuk Anda, tetapi mudah-mudahan pembaruan akan segera memperbaikinya.

JMAA
sumber
Terima kasih telah benar-benar memperbaiki masalah dan tidak memberikan solusi yang hanya menyelesaikan sebagian dan hanya untuk satu orang ...
Caleb Fenton
2

Menginstal pip dari apt dan pip itu sendiri dapat menyebabkan hal ini.

Dalam kasus saya, saya menggunakan paket pip Ubuntu untuk menginstal pipenv yang kemudian menginstal salinan pip yang lebih baru. Sekarang karena shell saya menjalankan skrip pip 9 Ubuntu (untuk memverifikasi run which pip3) dan juru bahasa Python saya kemudian mengimpor modul pip 10, perintah pip3 gagal. Jadi saya ingin menghapus salah satu dari keduanya.

Adil untuk menganggap Anda memiliki pip baru karena suatu alasan. Dalam hal ini Anda ingin mencopot pemasangan pip lama seperti:

sudo apt remove python3-pip

Jika Anda tahu pasti bahwa Anda setuju dengan pip lama dan lebih memilih paket sistem, Anda ingin menghapus yang lebih baru:

~/.local/bin/pip3 uninstall pip

atau gagal itu

sudo /usr/local/bin/pip3 uninstall pip

Jeff C
sumber
1

Tipe

hash -d pip3

Ini harus menghapus kesalahan ini

Bob
sumber
3
Bisakah Anda memberikan penjelasan lebih lanjut tentang jawaban Anda: apa itu 'hash' dan mengapa itu menghapus kesalahan?
Marc Vanhoomissen
1

Memasang ulang paksa pip berfungsi dengan baik untuk sebagian besar pengguna seperti yang ditunjukkan pada halaman github ini :

python -m pip install --force-reinstall pip
subtleseeker
sumber
Terima kasih. Semua jawaban sebelumnya gagal total, sedangkan jawaban Anda berhasil
Pynchia
0

Masalah saya akhirnya menjadi ketidakcocokan antara python3.6 dan 3.7. Instalasi python3.6 menempatkan tautan /usr/bin/python3 -> /usr/bin/python3.6meskipun sistem telah ditingkatkan ke python3.7.

sudo apt purge python-pip
sudo apt purge python3-pip
sudo apt install python3.7 --reinstall
cd /usr/bin
sudo rm python3
sudo ln -s python3.7 python3
python3 --version
pip3 --version
Gregory Alan Bolcer
sumber
-1

Ini bekerja untuk saya:

pip install --upgrade --user pip

Oleh install --upgrade, maksud saya apa pun Anda mencoba untuk menginstal.

Alex Jolig
sumber