ข้อผิดพลาดหลังจากอัปเกรด pip: ไม่สามารถนำเข้าชื่อ 'main'


467

เมื่อใดก็ตามที่ฉันพยายามติดตั้งแพคเกจใด ๆ ที่ใช้ pip ฉันได้รับข้อผิดพลาดในการนำเข้านี้:

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())

มันใช้งานได้ดีก่อนหน้านี้ฉันไม่แน่ใจว่าทำไมจึงเกิดข้อผิดพลาดนี้ขึ้น ฉันค้นหาข้อผิดพลาดนี้แล้ว แต่ไม่พบสิ่งที่จะแก้ไข

โปรดแจ้งให้เราทราบหากคุณต้องการรายละเอียดเพิ่มเติมฉันจะอัปเดตคำถามของฉัน


1
การสนทนาเพิ่มเติมที่ลิงค์นี้
Diagon

7
ฉันมีปัญหาเดียวกันเพราะฉันเคยpip install --upgrade pipอัพเกรด pip บนเซิร์ฟเวอร์ที่ฉันไม่มีสิทธิ์ของผู้ดูแลระบบ การถอนการติดตั้ง pip ด้วยการpython -m pip uninstall pipแก้ไขปัญหาของฉัน
โหลด

คำตอบไม่ได้ช่วยฉัน นี่คือปัญหาของฉัน: github.com/pypa/pipenv/issues/2095
Étienne

คำตอบ:


846

คุณต้องอัปเกรด pip ของระบบโดยไม่ตั้งใจ (อาจต้องผ่านsudo pip install pip --upgrade)

pip 10.x จะปรับตำแหน่งของ internals pip3คำสั่งคุณเห็นกำลังเป็นหนึ่งในการให้บริการโดยผู้ดูแลแพคเกจของคุณ (สมมุติ Debian ตามที่นี่?) และไม่ได้เป็นไฟล์ที่มีการจัดการโดย pip

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับสิ่งนี้ในตัวติดตามปัญหาของ pip

คุณอาจไม่ต้องการอัพเกรด pip ของระบบและใช้ virtualenv แทน

การกู้คืนไบนารีคุณจะต้องpip3sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

หากคุณต้องการที่จะยังคงอยู่ใน "ได้รับการสนับสนุนในดินแดน" (อัพเกรดแพคเกจที่อยู่นอกระบบการทำงานของผู้จัดการแพคเกจระบบ) คุณอาจจะได้รับไปกับแทนpython3 -m pip ...pip3


28
sudo apt install python3-pip --reinstallไม่ได้แก้ไขปัญหา python3 -m pipแต่ฉันสามารถติดตั้งแพคเกจการใช้ ขอบคุณสำหรับความช่วยเหลือของคุณ. ฉันกำลังทำเครื่องหมายว่าเป็นที่ยอมรับ
g_p

2
@g_p อัปเดตเส้นทาง "แก้ไข" - เพียงตรวจสอบพวกเขาในนักเทียบท่า (ฉันควรทำเช่นนั้นเป็นครั้งแรก!)
Anthony Sottile

5
ฉัน needet ที่จะใช้คำสั่ง 'หลาม -m pip ถอนการติดตั้ง pip' เป็น 'sudo pip ถอนการติดตั้ง pip' ให้ข้อผิดพลาดที่คล้ายกับคำถามเดิม
Mz

41
ขอบคุณ! นั่นช่วยได้! ใช้sudo python -m pip uninstall pip && sudo apt install python-pip --reinstallสำหรับ python2!
Barmaley

1
ใช้งานได้กับ Ubuntu บน Windows การแก้ปัญหาคือสิ่งที่ @Barmaley แนะนำสำหรับ python2 (ล่าม python เริ่มต้น)
jdhao

110

เราสามารถแก้ไขข้อผิดพลาดได้โดยแก้ไขไฟล์ pip

ตรวจสอบตำแหน่งของไฟล์:

$ which pip

เส้นทาง -> / usr / bin / pip

ไปที่ตำแหน่งนั้น ( / usr / bin / pip ) และเปิด terminal

Enter: $ sudo nano pip

คุณสามารถดู:

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

เปลี่ยนไป:

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

จากนั้นctrl + oเขียนการเปลี่ยนแปลงและออก

หวังว่าสิ่งนี้จะทำ !!


1
การเปลี่ยนแปลงเหล่านี้ไม่สามารถแก้ไขปัญหาได้ แต่การเปลี่ยนกลับเป็นข้อความดั้งเดิมได้ ¯_ (ツ) _ / ¯
David

2
ฉันลองสิ่งนี้ แต่ได้AttributeError: module 'pip.__main__' has no attribute 'main'
dnnagy

4
ตรวจสอบให้แน่ใจว่าคุณเขียน _main () ไม่ใช่ main ()
vijay athithya

2
ในรุ่นล่าสุดpip3ที่จะถูกย้ายไปmain() pip._internalควรเปลี่ยนคำสั่งการนำเข้าเป็นfrom pip._internal import main
Yossarian42

2
ทำงานเหมือนจับใจ! ขอบคุณ
mahesh nanayakkara

69

สำหรับครอบครัว Ubuntu, ผู้ใช้ Debian, Linux Mint

ด้วยคำอธิบายของ Anthony ด้านบนคุณสามารถเก็บ pip ระบบดั้งเดิมของคุณ (ใน / usr / bin / และ dist-packages /) และลบ pip ที่ติดตั้งด้วยตนเอง (ใน ~ / .local /) เพื่อแก้ไขข้อขัดแย้ง:

$ python3 -m pip uninstall pip

Ubuntu / Debian pip v8.1.1 (16.04) จากpython3-pipแพ็คเกจ debian (ดู$ pip3 -V) แสดงผลการค้นหาเดียวกับ pip v10.0.1 ล่าสุดและติดตั้งโมดูลล่าสุดจาก PyPI แต่ก็มีการทำงานpipคำสั่ง (แล้วใน $ PATH) บวกที่ดี--userตัวเลือก patched ตามค่าเริ่มต้นตั้งแต่ปี 2016 กำลังมองหาที่บันทึกประจำรุ่น pip , รุ่นใหม่ส่วนใหญ่จะเกี่ยวกับการแก้ไขข้อผิดพลาดกรณีการใช้งานที่เฉพาะเจาะจงและคุณสมบัติใหม่บางอย่างเพื่อไม่ทุกคนต้องรีบอัพเกรด pip แค่นี้ และ pip ​​10 ใหม่สามารถปรับใช้กับ Python virtualenvs ได้

แต่ไม่ว่าจะเป็น pip ระบบปฏิบัติการของคุณอนุญาตให้ติดตั้งโมดูล Python ทั่วไปได้อย่างรวดเร็ว (รวมถึง numpy) ด้วย APT โดยไม่จำเป็นต้องใช้ pip เช่น:
$ sudo apt install python3-numpy python3-scipy(ด้วยการพึ่งพาระบบ)
$ sudo apt install python3-pip(pip พึ่งพาDebian, เก่ากว่าเล็กน้อย แต่ไม่สำคัญ)

การแจ้งเตือนทางไวยากรณ์อย่างรวดเร็ว apt (โปรดดูman aptรายละเอียด):
$ sudo apt update(เพื่อซิงค์ไฟล์ดัชนีแพ็คเกจของ Ubuntu จากแหล่งข้อมูลล่าสุด)
$ apt search <python-package-name> (ค้นหาข้อความทั้งหมดในแพ็คเกจที่มีทั้งหมด)
$ apt show <python-package-name>(แสดงรายละเอียดแพ็คเกจโดยละเอียด)
$ sudo apt install <python-package-name>

ชื่อแพ็กเกจนำหน้าด้วยpython-สำหรับ Python 2; และนำหน้าด้วยpython3-สำหรับ Python 3 (เช่น python3-pandas) มีหลายพันและพวกเขาได้รับการทดสอบการรวมภายใน Debian และ Ubuntu ถ้าคุณไม่ต้องการติดตั้งที่ระดับต่อผู้ใช้ ( pip install --userตัวเลือก) หรือภายใน virtualenv / venv apt อาจเป็นสิ่งที่คุณต้องการ แพคเกจระบบเหล่านี้สามารถเข้าถึงได้จาก envs เสมือนเช่นกันเนื่องจากvirtualenvจะย้อนกลับไปที่การใช้ libs ของระบบในการนำเข้าถ้า envs ของคุณไม่มีสำเนาของโมดูล --userโมดูลที่ผู้ใช้กำหนดเองซึ่งติดตั้งเอง (พร้อม pip ) ~/.local/libจะแทนที่ด้วยเช่นกัน

หมายเหตุเนื่องจากนี่เป็นการติดตั้งทั่วทั้งระบบคุณจึงไม่จำเป็นต้องลบออกบ่อยครั้ง (จำเป็นต้องคำนึงถึงการพึ่งพาระบบปฏิบัติการ) นี้จะสะดวกสำหรับแพคเกจที่มีการพึ่งพาระบบจำนวนมาก (เช่นกับ SciPy หรือ matplotlib) เช่น APT จะติดตามและให้ libs ระบบทั้งหมดที่จำเป็นและนามสกุล C, ขณะที่ pip คุณมีการค้ำประกันดังกล่าว

อันที่จริงสำหรับแพคเกจ Python ทั่วทั้งระบบ (ตรงกันข้ามกับต่อผู้ใช้, ระดับ dir ที่บ้านหรือต่ำกว่า), Ubuntu คาดว่าจะใช้ตัวจัดการแพคเกจ APT (แทนที่จะเป็นsudo pip ) เพื่อหลีกเลี่ยงการทำลาย OS: sudo pip3กำหนดเป้าหมาย/usr/lib/python3/dist-packagesไดเรกทอรีเดียวกันที่ APT จัดเก็บ OS โมดูลที่มีความสำคัญ การเผยแพร่ Debian / Ubuntu ล่าสุดนั้นขึ้นอยู่กับ Python 3 อย่างมากดังนั้นโมดูลที่ติดตั้งไว้ล่วงหน้าจะได้รับการจัดการโดยaptและไม่ควรเปลี่ยนแปลง

ดังนั้นหากคุณใช้pip3 installคำสั่งโปรดตรวจสอบให้แน่ใจว่ามันทำงานในสภาพแวดล้อมเสมือน dev แบบแยกเช่นกับvirtualenv ( sudo apt install python3-virtualenv) หรือด้วย Python3 ในตัว ( -m venv) หรือที่ระดับต่อผู้ใช้ ( --userตัวเลือก pip เป็นค่าเริ่มต้นใน Ubuntu ที่จัดไว้ให้ pip ตั้งแต่ปี 2559) แต่ไม่ใช่ทั้งระบบ (ไม่เคยsudo pip3!) เนื่องจาก pip รบกวนการทำงานของตัวจัดการแพคเกจ APT และอาจส่งผลต่อ Ubuntu OSส่วนประกอบของเมื่อโมดูลหลามที่ใช้ในระบบมีการเปลี่ยนแปลงโดยไม่คาดคิด โชคดี!


พี S. สิ่งที่กล่าวมาทั้งหมดนี้ใช้สำหรับวิธี 'อุดมคติ' (วิธี Debian / Ubuntu)

ถ้าคุณยังต้องการใช้ pip3 v10 ใหม่โดยเฉพาะมีวิธีแก้ไขปัญหาด่วน 3 วิธี:

  • เพียงเปิดเซสชัน bash ใหม่ (แท็บเทอร์มินัลใหม่หรือประเภทbash) - และ pip3 v10 จะพร้อมใช้งาน (ดูpip3 -V) pip3 v8 ของเดเบียนยังคงติดตั้ง แต่เสีย หรือ
  • คำสั่ง$ hash -d pip3 && pip3 -V เพื่อรีเฟรชชื่อพา ธ pip3 ใน $ PATH pip3 v8 ของเดเบียนยังคงติดตั้ง แต่เสีย หรือ
  • คำสั่ง$ sudo apt remove python3-pip && hash -d pip3ถอนการติดตั้ง pip3 v8 ของเดเบียนโดยสมบูรณ์เพื่อสนับสนุน pip3 v10 ใหม่ของคุณ

หมายเหตุ:คุณจะต้องเพิ่มการ--userตั้งค่าสถานะไปยัง pip ใด ๆ ที่ไม่ใช่ debian ยกเว้นว่าคุณอยู่ใน virtualenv! (ปรับใช้แพ็กเกจหลามไป~/.local/เป็นค่าเริ่มต้นใน debian / ubuntu ที่ให้ไว้ python3-pip และ python-pip ตั้งแต่ 2016) การใช้งาน pip 10 ทั้งระบบของคุณนอก virtualenv นั้นไม่รองรับโดย Ubuntu / Debian จริงๆ ไม่เคยsudo pip3!

รายละเอียดเพิ่มเติม:
https://github.com/pypa/pip/issues/5221#issuecomment-382069604
https://github.com/pypa/pip/issues/5240#issuecomment-381673100


คุณสามารถช่วยฉันเข้าใจว่าทำไมการติดตั้งรุ่นอัพเกรดของpip ท้องถิ่นที่มี--userคือไม่มีsudoผลกระทบต่อความสามารถของฉันในการทำงานที่ฉลาดที่ติดตั้งpip? ฉันคิดว่าทั้งสองจะอยู่ร่วมกัน แต่เป็นส่วนสำคัญนี้python3 -m pip install --user --upgrade pipแสดงให้เห็นแนวโน้มที่ติดตั้งหนึ่งแบ่งหลังจากที่ผมทำ ฉันไม่ได้มองหาวิธีแก้ปัญหา - ฉันแค่อยากรู้อยากเห็นจริง ๆ ว่าเกิดอะไรขึ้นที่นี่
George Hawkins

1
@George มันเกิดขึ้นเนื่องจากการจับคู่ระหว่างไพพ์ไลบรารี่กับ wrappers ของมันที่นำเข้า ความพยายามในการเรียกใช้คำสั่ง pip ของระบบทันที (โดยไม่ต้องใช้วิธีแก้ไขปัญหาใด ๆ) จะยังคงเรียกเวอร์ชันของระบบที่ติดตั้ง apt ของสคริปต์ wrapper ของ pip /usr/bin/pip3มากกว่าที่จะติดตั้งเป็น--user( ~/.local/bin/pip*) ตามระบบปฏิบัติการ $ PATH ที่ยังคงตั้งค่าให้ทำงาน เวอร์ชันระบบของ wrapper แต่ไม่ใช่
อเล็กซ์ซี

2
@George นี่เป็นเพราะตอนนี้มีแพคเกจ pip รุ่นใหม่ที่ติดตั้งไว้~/.local/lib/python3.?/site-packages/pipซึ่งมีความสำคัญเหนือกว่าระบบหนึ่งในการนำเข้า Python แบบสัมพัทธ์ และเนื่องจากกระดาษห่อเก่าพยายามfrom pip import mainมากกว่าfrom pip._internalหรือมัน__main__เรียนกับรุ่นใหม่ของแพคเกจ pip ที่คำสั่ง pip ImportError: cannot import name 'main'จากเค้าล้มเหลวด้วย ดังนั้น pips ทั้งสองสามารถอยู่ร่วมกันได้ (บนดิสก์) แต่การทำงานของระบบเดิมจะ "เสีย" ..
Alex C.

+1 --userสำหรับ pip install --userเป็นสิ่งที่ทำเพื่อฉัน (ฉันมี python 2.7, python 3.6 และ python 3.7 ทั้งหมดติดตั้งบน Ubuntu 18.04 LTS)
Stephen G Tuggy

46

แก้ไขได้ในขั้นตอนเดียวเท่านั้น

ฉันก็ประสบกับปัญหานี้เช่นกัน แต่สิ่งนี้สามารถแก้ไขได้ง่าย ๆ เพียงแค่ 1 คำสั่งโดยไม่ต้องกังวลและเสียเวลาและฉันได้ลองใช้กับหลาย ๆ ระบบแล้วมันเป็นทางเลือกที่สะอาดที่สุดสำหรับปัญหานี้ และนั่นคือ:

สำหรับ python3: - sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstallpython3:

pip3จากนี้คุณก็สามารถติดตั้งแพคเกจการใช้ เพื่อตรวจสอบการใช้งานpip3 --versionเพื่อตรวจสอบการใช้งาน

สำหรับรุ่นเก่าใช้: sudo python -m pip uninstall pip && sudo apt install python-pip --reinstallสำหรับรุ่นเก่าใช้:

pipโดยวิธีการนี้ตอนนี้คุณก็สามารถติดตั้งแพคเกจการใช้ pip --versionเพื่อตรวจสอบการใช้งาน


31

ใช้python -m pip installแทนpip install

ตัวอย่าง:

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

ปฏิบัติการpip(resp. pip3) จัดทำโดย distro ของคุณ ( python-pipแพ็คเกจบน Ubuntu 16.04) และตั้งอยู่ที่/usr/bin/pipและตั้งอยู่ที่

ดังนั้นจึงไม่ได้รับการปรับปรุงให้ทันสมัยด้วย pipแพ็กเกจปัจจุบันเมื่อคุณอัพเกรด pip และอาจแตก

หากคุณใช้python -m pipโดยตรงเช่นใน:

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

มันผ่านเส้นทาง Python ของคุณค้นหา pip รุ่นล่าสุดและดำเนินการกับไฟล์นั้น

มันขึ้นอยู่กับความจริงที่ว่าไฟล์นั้นสามารถเรียกใช้ได้ผ่าน importได้ แต่นั่นเป็นอินเตอร์เฟซแบบมาตรฐานมากและมีโอกาสน้อยที่จะแตกหักกว่าสคริปต์ Debian ของแฮกเกอร์

จากนั้นฉันแนะนำให้เพิ่มชื่อแทนต่อไปนี้ใน.bashrc:

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

/usr/bin/pip3ไฟล์Ubuntu 18.04 ทำ:

from pip import main

และน่าจะmainถูกลบออกจากpipบางจุดซึ่งเป็นสิ่งที่แตก

การแบ่งจุดแบ่งที่ดูเหมือนจะเป็น: 95bcf8c5f6394298035a7332c441868f3b0169f4 "ย้าย API ภายในทั้งหมดไปยัง pip._internal"ซึ่งเข้าไปใน pip 18.0

ทดสอบใน Ubuntu 16.04 หลังจากอัพเดตจากpip39.0.1 เป็น 18.0

pyenv

อย่างไรก็ตามในที่สุดสำหรับการพัฒนา Python อย่างจริงจังฉันขอแนะนำให้คุณติดตั้ง Python ในพื้นที่ของคุณเองด้วย pyenv + virtualenv ซึ่งจะแก้ไขข้อผิดพลาดของ Ubuntu นี้ด้วย: /ubuntu/682869/how-do-i- ติดตั้ง-a-ที่แตกต่างกันหลามรุ่นที่ใช้-apt-get / 1195153 # 1195153


3
หลังจากการค้นหา 5 ชั่วโมงสิ่งนี้ใช้ได้กับฉัน ฉันสามารถส่งดอกไม้ให้คุณถ้าคุณส่งที่อยู่ของคุณ ขอบคุณ.
cagri

18

คุณสามารถแก้ไขปัญหานี้ได้โดยติดตั้ง pip

ใช้หนึ่งในคำสั่งบรรทัดคำสั่งต่อไปนี้เพื่อติดตั้ง 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

16

ตรวจสอบว่า pip ถูกแคชในพา ธ อื่นหรือไม่โดยโทรไปที่$ pipและตรวจสอบว่าเส้นทางนั้นแตกต่างจากที่แจ้งในข้อผิดพลาดหรือไม่หากเป็นกรณีนี้ให้ดำเนินการดังนี้

$ hash -r

เมื่อล้างแคชแล้ว Pip จะกลับมาทำงานอีกครั้ง การอ้างอิง: http://cheng.logdown.com/posts/2015/06/14/-usr-bin-pip-no-such-file-or-directory


8

ฉันทำงานบนระบบที่ฉันมี sudo apt แต่ไม่มี sudo pip (และไม่สามารถเข้าถึง su) ฉันเข้าสู่สถานการณ์เดียวกันนี้โดยทำตามคำแนะนำจาก pip:

คุณกำลังใช้ pip เวอร์ชั่น 8.1.1 แต่มี 18.0 อยู่ คุณควรพิจารณาอัปเกรดผ่านคำสั่ง 'ติดตั้ง pip - อัพเกรด pip'

การแก้ไขอื่น ๆ ไม่ทำงานสำหรับฉันเพราะฉันไม่มีสิทธิ์ของผู้ดูแลระบบเพียงพอ อย่างไรก็ตามมีบางสิ่งที่ติดอยู่กับฉันจากการอ่านข้อมูลนี้:

  • ฉันไม่ควรทำอย่างนี้ แน่นอน pip บอกให้ฉันทราบ มันโกหก
  • การใช้ --user แก้ปัญหาได้มากมายโดยเน้นไปที่ไดเรกทอรีเฉพาะผู้ใช้

ดังนั้นฉันจึงพบว่าบรรทัดคำสั่งนี้ใช้งานได้เพื่อเปลี่ยนกลับเป็นตำแหน่งเดิม หากคุณใช้เวอร์ชั่นที่แตกต่างจาก 8.1.1 คุณจะต้องเปลี่ยนส่วนนั้นอย่างเห็นได้ชัด

python -m pip install --force-reinstall pip==8.1.1 --user

นั่นเป็นสิ่งเดียวที่ทำงานให้ฉัน แต่มันทำงานได้อย่างสมบูรณ์แบบ!



5

สิ่งเดียวกันเกิดขึ้นกับฉันใน Pixelbook โดยใช้ LXC ใหม่ (สตรีม) โซลูชันนี้คล้ายกับโซลูชันที่ได้รับการยอมรับซึ่งมีความแตกต่างเล็กน้อยอย่างหนึ่งซึ่งเป็นค่าคงที่ pip3 สำหรับฉัน

sudo python3 -m pip install --upgrade pip

ที่ชนรุ่นและตอนนี้มันทำงานตามที่คาดไว้

ฉันพบมันที่นี่ ... Python.org: ตรวจสอบให้แน่ใจว่า pip เป็นข้อมูลล่าสุด


4

ฉันพบปัญหาเดียวกันในระบบ Ubuntu 16.04 ของฉัน ฉันจัดการเพื่อแก้ไขได้โดยติดตั้ง pip ใหม่ด้วยคำสั่งต่อไปนี้:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3


มีประโยชน์ที่คุณติดตั้งจากแหล่งและไม่มีการทำงานข้างต้นใน Debian 9 ที่ว่างเปล่าที่สะอาด (จากผู้ให้บริการเซิร์ฟเวอร์ของฉันโดยเฉพาะ)
Peter Rosemann

การดัดผมอินเทอร์เน็ตให้กับผู้ใช้ขั้นสูงสิ่งที่ผิดพลาด!
Sum1sAdmin

3

คำสั่งข้างต้นไม่ได้ผลสำหรับฉัน แต่สิ่งเหล่านี้มีประโยชน์มาก:

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

2

ใน ubuntu 18.04.1 Bionic Beaver คุณต้องออกจากระบบและลงชื่อกลับเข้าใช้ (ไม่จำเป็นต้องรีสตาร์ท) เพื่อให้ได้สภาพแวดล้อมที่เหมาะสม

$ 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)

1

ผมใช้ sudo apt remove python3-pip แล้วpipทำงาน

 ~ 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]

1
เป็นเพราะpipสำหรับ Python 2 OP ใช้pip3รุ่น Python 3 pipที่คุณเพิ่งลบออก ทั้งสองนี้แตกต่างกันและไม่สามารถใช้แทนกันได้
Neinstein

1

สำหรับ Python เวอร์ชัน 2.7 @Anthony solution ทำงานได้อย่างสมบูรณ์แบบโดยเปลี่ยนpython3เป็นpythonดังนี้

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

1

สิ่งที่ใช้ได้ผลสำหรับฉันในการแก้ไขข้อผิดพลาดเมื่อใช้pip3คือ:

sudo cp -v /usr/local/bin/pip3 /usr/bin/pip3

ทุกอย่างทำงานได้:

 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)

บางที pip เวอร์ชัน 10.0.1 ใหม่อาจไม่อัปเดตไบนารีใน / usr / bin ใช่ไหม (ซึ่งดูเหมือนว่าจะไม่ได้)

แก้ไข: ปัญหาเดียวกันเกิดขึ้นใน Ubuntu 18.04 ทางออกที่ดีที่สุดที่ฉันพบคือ symlink pip pip จาก/home/<user/.local/binไปยัง/usr/local/binหรือ/usr/bin(ขึ้นอยู่กับความชอบของคุณ) ดังนี้:

ln -sv /home/<user>/.local/bin/pip /usr/local/bin/pip
ln -sv /home/<user>/.local/bin/pip2 /usr/local/bin/pip2
ln -sv /home/<user>/.local/bin/pip2.7 /usr/local/bin/pip2.7
ln -sv /home/<user>/.local/bin/pip3 /usr/local/bin/pip3
ln -sv /home/<user>/.local/bin/pip3.6 /usr/local/bin/pip3.6

หมายเหตุ:แทนที่ <user> ด้วยผู้ใช้ปัจจุบันของคุณ

รุ่นที่เกี่ยวข้อง (ล่าสุด) อยู่ใน:

เวอร์ชั่น 3.6:

/home/demon/.local/lib/python3.6/site-packages/pip (python 3.6)

รุ่น 2.7:

/home/demon/.local/lib/python2.7/site-packages/pip (python 2.7)


อันนี้แก้ไขปัญหาของฉัน คำตอบอื่น ๆ ไม่ได้
Amin Husni

1
จริงๆคุณไม่ควร messing โดยตรงกับไฟล์ใน/usr/binแต่ และคุณPATHคือผิดถ้าไม่ได้ก่อน/usr/local/bin /usr/bin
tripleee

ไบนารี pip /usr/local/binไม่อยู่ใน มันมีเฉพาะใน/home/<user>/.local/binและ / หรือ/home/<user>/.local/lib/python<version>/site-packages/pipในเวอร์ชันใหม่ (v10.0 + ไม่อัปเดตไบนารีใน/usr/bin) ดังนั้นเหตุผลที่ต้องสร้างสำเนาหรือ symlink ของไบนารีใน/usr/binหรือ/usr/local/bin(ขึ้นอยู่กับการตั้งค่าของผู้ใช้) เพื่อให้ pip สามารถทำงานได้ทั่วโลกจาก commandline
cryptoboy

มีอยู่ในไดเรกทอรี pip ไบนารีและควรเชื่อมโยง / คัดลอกมาจาก: demon @ Bionic18: ~ / .local / bin $ ls pip pip2 pip2.7 pip3 pip3.6 pipค่าเริ่มต้นไบนารีไปยังเวอร์ชันล่าสุดที่ติดตั้งบนระบบ
cryptoboy


0

ผมมีข้อผิดพลาดเดียวกันนี้ แต่ยังคงทำงานดังนั้นฉันคงได้มีตัวเลือกนิวเคลียร์python -m pip sudo python -m pip install --upgrade pipมันทำเพื่อฉัน


0

สำหรับสิ่งที่คุ้มค่าฉันมีปัญหากับpip(ไม่pip2หรือ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)

อย่างใด (ฉันจำไม่ได้ว่า) ฉันมีสิ่งหลามติดตั้งใน~/.localไดเรกทอรีของฉัน หลังจากฉันลบไดเรกทอรี pip ออกจากที่นั่นpipเริ่มทำงานอีกครั้ง

$ 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)

0

มีบางอย่างผิดปกติกับแพ็คเกจเมื่อสร้างไฟล์ / usr / bin / pip คุณต้องเปลี่ยนการนำเข้า:

from pip import main

ถึง

from pip._internal import main

ที่แก้ปัญหาฉันไม่แน่ใจว่าทำไมมันสร้าง แต่มันบอกบางสิ่งในปัญหาต่อไปนี้:

หลังจากอัปเกรด pip 10 เป็น pyenv "ImportError: ไม่สามารถนำเข้าชื่อ 'main'"


0

คุณสามารถลองสิ่งนี้:

sudo ln -sf $( type -P pip ) /usr/bin/pip

3
ในขณะที่รหัสนี้อาจตอบคำถามมันจะดีกว่าที่จะรวมบางบริบทอธิบายวิธีการทำงานและเวลาที่จะใช้ คำตอบแบบรหัสเท่านั้นไม่มีประโยชน์ในระยะยาว
Giulio Caccin

0

ฉันเจอปัญหานี้เมื่อฉันต้องการอัพเกรดระบบ pip pip3จาก 9.0.1 เป็น 19.2.3

หลังจากทำงานpip3 install --upgrade pipแล้วpipเวอร์ชันจะกลายเป็น 19.2.3 แต่main()ถูกย้ายไปอยู่pip._internalในเวอร์ชั่นล่าสุดซึ่งออกเดินทางpip3แตกหัก

ดังนั้นในแฟ้ม/usr/bin/pip3แทนที่line 9: กับfrom pip import main from pip._internal import mainปัญหาจะได้รับการแก้ไขใช้งานได้เหมือนกันสำหรับpython2-pipปัญหาจะได้รับการแก้ไขการทำงานเดียวกันสำหรับ(ทดสอบกับการกระจาย Ubuntu 18.04)

ตามคำตอบของ @Vincent H.



0

คุณสามารถแก้ไขเส้นทาง pip และ pip3 โดยใช้ update-alternatives

สิ่งแรกที่คุณควรตรวจสอบคือการ$PATH ทำงานปัจจุบันของคุณecho $PATHและดูว่าคุณสามารถค้นหาได้/usr/local/binจุดไหนที่ pip3 และ pip ​​เป็นปกติ

มีการเปลี่ยนแปลงระบบของคุณกำลังดูที่นี่/bin/pipและ/bin/pip3 ดังนั้นฉันจะบอกว่าแก้ไขเส้นทางโดยการเพิ่ม~/.bash_profileไฟล์ของคุณเพื่อให้มันยังคงมีอยู่

export PATH=$PATH:/usr/local/bin และจากนั้นตรวจสอบการแก้ไขด้วยwhich pipและwhich pip3

หากไม่ใช้update-alternativesให้แก้ไขในที่สุด

update-alternatives --install /bin/pip3 pip3 /usr/local/bin/pip3 30

และถ้าคุณต้องการชี้ pip ไปที่ pip3

update-alternatives --install /bin/pip pip /usr/local/bin/pip3 30

0

สิ่งนี้ได้ผลสำหรับฉัน!

hash -r pip # or hash -d pip

ตอนนี้ถอนการติดตั้ง pip เวอร์ชั่นที่ติดตั้งและติดตั้งใหม่โดยใช้คำสั่งต่อไปนี้

python -m pip uninstall pip  # sudo
sudo apt install --reinstall python-pip

หาก pip เสียให้ใช้:

python -m pip install --force-reinstall pip

หวังว่ามันจะช่วย!


-1

นำเข้าหลักจาก pip._internal

from pip._internal import main

แก้ไขรหัส pip จาก

sudo nano /usr/bin/pip3

คุณสามารถแก้ไขคำตอบและระบุได้ดีกว่าหรือไม่ ยังไม่ชัดเจนว่าจะแก้ไขไฟล์อย่างไร/usr/bin/pip3...
M. Volf

-1

ดังที่ @cryptoboy พูด - ตรวจสอบว่า pip / python เวอร์ชั่นใดที่คุณติดตั้ง

 demon@UbuntuHP:~$ pip -V
 demon@UbuntuHP:~$ pip2 -V
 demon@UbuntuHP:~$ pip3 -V

จากนั้นตรวจสอบไลบรารีที่ไม่ต้องการในโฟลเดอร์. local / lib /

ฉันสำรองข้อมูลการตั้งค่าเมื่อฉันย้ายไปยัง Kubuntu รุ่นใหม่กว่าและมีโฟลเดอร์. local / lib / python2.7 / ในไดเรกทอรีหลักของฉัน ติดตั้งไพ ธ อน 3.6 ฉันเพิ่งลบโฟลเดอร์เก่าและตอนนี้ทุกอย่างใช้งานได้ดี!


-1

ใน Debian คุณจะต้องอัพเดท apt ก่อน ....

sudo apt-get update -qq
sudo apt-get install python-pip -qq
sudo pip install pip --upgrade --quiet
sudo pip2 install virtualenv --quiet

หากคุณข้าม 'sudo apt-get update -qq' pip ของคุณจะเสียหายและแสดงข้อผิดพลาด 'ไม่พบหลัก'


-1

ข้อผิดพลาดนี้อาจเป็นการอนุญาต ดังนั้นทดสอบการดำเนินการคำสั่งด้วยแฟล็ก -H :

sudo -H pip3 install numpy

คำถามชัดเจนว่า ImportError ไม่ใช่ข้อผิดพลาดเรื่องสิทธิ์
Anthony Sottile

-1

ใช้คำสั่งต่อไปนี้ก่อนที่จะดำเนินการของคำสั่ง pip ใด ๆ

hash -d pip

มันจะทำงาน


1
คุณช่วยอธิบายได้ไหมว่ามันจะช่วยให้ / + ลบความคิดเห็นที่เป็นลบหรือไม่?
เอลฟ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.