Chạy Pip3 ImportError: không thể nhập tên 'chính'


21

Tôi muốn cài đặt Scipy (đã cài đặt Numpy). Tôi đã cài đặt Python 3.5.1-3 với OS và IDLE3 (3.5.2). Khi tôi nhấn trong thiết bị đầu cuối

sudo pip3 install scipy

Nó in ra

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

Tôi đã thử cài đặt lại pip3 và khởi động lại hệ điều hành, nhưng nó không thay đổi. Pip3 đã làm việc kỳ lạ với người khác?

Câu trả lời:


10

numpy và scipy nằm trong kho lưu trữ mặc định của tất cả các phiên bản Ubuntu hiện được hỗ trợ. Để cài đặt numpy và scipy cho Python 3.x, hãy mở terminal và gõ:

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

Đối với Python 2.x, nó:

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

1
python3-scipy hoạt động tốt. Cảm ơn!
Chó Hog không thể đảo ngược

1
Như một câu trả lời khác nêu, câu trả lời này không liên quan đến vấn đề cơ bản, liên quan đến pip.
cjauvin

Đó là phương pháp tồi ...
darkwoolf

26

Sử dụng python -m pip installthay vìpip install

Thí dụ:

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

Tôi bắt đầu gặp vấn đề này sau khi pipnâng cấp:

pip install --upgrade --user pip

Việc thực thi pip(resp. pip3) Được cung cấp bởi distro của bạn ( python-pipgói trên Ubuntu 16.04).

Do đó, nó không được cập nhật với pipchính gói khi bạn nâng cấp pip và có thể bị hỏng.

Nếu bạn chỉ sử dụng python -m piptrực tiếp, ví dụ như trong:

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

nó đi qua đường dẫn Python của bạn và tìm phiên bản mới nhất của pip và thực thi tệp đó.

Nó dựa vào thực tế là tập tin đó có thể thực thi được, nhưng đó là một loại giao diện rất chuẩn, và do đó ít có khả năng bị phá vỡ hơn so với tập lệnh Debian hack.

Sau đó, tôi khuyên bạn nên thêm các bí danh sau vào .bashrc:

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

Tệp Ubuntu 18.04 /usr/bin/pip3có:

from pip import main

và có lẽ mainđã bị loại bỏ piptại một số điểm đó là những gì đã phá vỡ mọi thứ.

Cam kết phá vỡ pip dường như là: 95bcf8c5f6394298035a7332c441868f3b0169f4 "Di chuyển tất cả các API nội bộ sang pip._iternal" đã đi vào pip 18.0.

Đã thử nghiệm trong Ubuntu 16.04 sau khi cập nhật từ pip39.0.1 đến 18.0.

pyenv

Tuy nhiên, cuối cùng, để phát triển Python nghiêm túc, tôi chỉ khuyên bạn nên cài đặt Python cục bộ của riêng bạn với pyenv + virtualenv, điều này cũng sẽ khắc phục lỗi Ubuntu này: Làm cách nào để tôi cài đặt phiên bản Python khác bằng apt-get?


1
Vì vậy, điều này hoạt động, nhưng tôi không thể là người duy nhất lắc đầu ở đây. Sự cố ở đâu? Tại sao nâng cấp pip mặc định không thể thiết lập pip mới theo cách mà nó tiếp tục hoạt động?
Steven Lu

@StevenLu sự hiểu biết của tôi là /usr/bin/pipđược cung cấp bởi gói Ubuntu Python và pipkhông ghi đè lên nó. Nhưng pip updatenó được quản lý bởi pipchính nó và tránh chạm vào các tệp Ubuntu.
Ciro Santilli 新疆 心 心

Hi ho cùng kinh nghiệm ở đây. Pip3 sẽ KHÔNG hoạt động không quan trọng những gì tôi đã làm. Giải pháp này hoạt động, nhưng làm thế nào đến ?? Kịch bản lệnh python pip được chuẩn bị bởi Debian- Nhận xét cho biết: 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. Có lẽ có một cách để cài đặt Python đúng cách theo cách python.
sẽ

@will Tôi không chắc về nhận xét tài liệu đó, nhưng tôi chắc chắn mã của /usr/bin/pipnó là gì :-)
Ciro Santilli 心 心

20

Lỗi được tìm thấy trong pip 10.0.0.

Trong linux, bạn cần sửa đổi tệp: / usr / bin / pip từ:

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

đến đây:

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

Phong cách giải quyết này dường như không được đề xuất bởi pipnhóm.
jdk1.0

Bạn đã cứu ngày của tôi !!
Saurabh Singh

8

Tôi gặp vấn đề tương tự, nhưng gỡ cài đặt và cài đặt lại với apt và pip không hoạt động với tôi.

Tôi thấy một giải pháp khác trình bày một cách dễ dàng để khôi phục đường dẫn pip3:

sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

Điều này đã hạ cấp phiên bản pip3 của tôi từ 19.0.3 xuống 8.1.1, nhưng nó đã khắc phục được triệu chứng này.
Hawkeye Parker

6

Mặc dù karel có thể đã giải quyết được vấn đề "cài đặt numpy và scipy" của bạn, nhưng có vấn đề gì với pip trên hệ thống của bạn chưa được giải quyết, vì vậy bạn có thể sẽ gặp nhiều vấn đề hơn với pip trong tương lai.

Nhìn vào đây , có vẻ như đây là một vấn đề khá phổ biến gần đây với pip 10 trên các hệ thống Ubuntu. Bạn có thể tìm thấy một số công việc xung quanh chủ đề đó phù hợp với bạn, nhưng hy vọng bản cập nhật sẽ khắc phục sớm.


Cảm ơn bạn đã thực sự khắc phục vấn đề và không giải quyết vấn đề mà chỉ giải quyết được một phần vấn đề và chỉ cho một người duy nhất ...
Caleb Fenton

2

Cài đặt pip từ cả apt và pip có thể gây ra điều này.

Trong trường hợp của tôi, tôi đã sử dụng gói pip của Ubuntu để cài đặt pipenv, sau đó cài đặt một bản sao mới hơn của pip. Bây giờ vì trình bao của tôi chạy tập lệnh pip 9 của Ubuntu (để xác minh chạy which pip3) và trình thông dịch Python của tôi sau đó nhập mô-đun pip 10, lệnh pip3 không thành công. Vì vậy, tôi muốn gỡ cài đặt một trong hai.

Thật công bằng khi cho rằng bạn có pip mới hơn vì một lý do. Trong trường hợp đó, bạn muốn gỡ cài đặt các pip cũ hơn như vậy:

sudo apt remove python3-pip

Nếu bạn biết chắc chắn rằng bạn ổn với pip cũ hơn và thích gói hệ thống, bạn sẽ muốn gỡ cài đặt gói mới hơn:

~/.local/bin/pip3 uninstall pip

hoặc thất bại

sudo /usr/local/bin/pip3 uninstall pip


1

kiểu

hash -d pip3

Điều này sẽ loại bỏ lỗi này


3
Bạn có thể giải thích thêm về câu trả lời của mình: 'băm' là gì và tại sao nó lại xóa lỗi không?
Marc Vanhoomissen

1

Buộc cài đặt lại pip hoạt động tốt đối với hầu hết người dùng như được hiển thị trên trang github này:

python -m pip install --force-reinstall pip

cảm ơn bạn. Tất cả các câu trả lời trước đó đều thất bại thảm hại, trong khi câu trả lời của bạn đã có hiệu quả
Pynchia

0

Vấn đề của tôi cuối cùng là sự không phù hợp giữa python3.6 và 3.7. Cài đặt python3.6 đặt một liên kết /usr/bin/python3 -> /usr/bin/python3.6mặc dù hệ thống đã nâng cấp lên 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

-1

Điều này làm việc cho tôi:

pip install --upgrade --user pip

Bởi install --upgrade , tôi có nghĩa là bất cứ điều gì bạn đang cố gắng để cài đặt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.