pip3“ TypeError: วัตถุ 'โมดูล' ไม่สามารถเรียกได้” หลังจากอัพเดต


42

ฉันใหม่ใน Python ฉันต้องการติดตั้ง Jupyter Notebook ในคอนโซลของฉันฉันป้อนสิ่งต่อไปนี้:

pip3 install --upgrade pip 

หลังจากนั้นฉันมีข้อผิดพลาดในการใช้ pip3 ติดตั้งไลบรารีอื่น ๆ คอนโซลพิมพ์:

File "/usr/bin/pip3", line 11, in <module>
    sys.exit(main())
TypeError: 'module' object is not callable

ฉันไม่รู้ว่าฉันต้องทำอะไร

ฉันใช้sudo autoremove python3-pipหลังจากนั้นฉันจะใช้sudo apt install python3-pip


บางทีมันอาจนำเข้าไฟล์ของคุณแทนโมดูลที่คาดหวังและมีปัญหาในการเรียกใช้ - มันอาจจะเป็น main.py. คุณลองใช้pipในโฟลเดอร์อื่นหรือไม่?
furas

1
ฉันก็มีข้อผิดพลาดเดียวกัน
Hyrial

ขอบคุณที่เริ่มฉัน - ฉันแสดงขั้นตอนการแก้ไขนี้ในstackoverflow.com/questions/34573159/ …
jvonehr

คำตอบ:


61

จากลิงค์ของแบรมฉันเพิ่งวิ่งpython3 -m pip uninstall pipและมันก็เริ่มทำงานอีกครั้ง


3
ใครสามารถอธิบายสิ่งนี้ได้บ้าง
Saif Ur Rahman

5
@SaifUrRahman: จากลิงก์ที่ให้ไว้ดูเหมือนว่านี่เป็นข้อขัดแย้งระหว่างการติดตั้ง pip เฉพาะผู้ใช้ (ซึ่งได้รับการติดตั้ง / อัพเกรดโดยคำสั่ง OPs) และการติดตั้ง pip ทั่วโลกที่จัดทำโดยระบบปฏิบัติการ
vlz

5

ทางออกสำหรับสถานการณ์ของฉันคือการแก้ไขไฟล์ pip3.8 ในสภาพแวดล้อม Ubuntu

method1:

#!/path/to/.venv/bin/python3
# -*- coding: utf-8 -*-
import re
import sys

from pip._internal.main import main  # <--- look at this import statement! 

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

method2:

ฟังก์ชั่นหลักจะต้องมีการนำเข้าหรือเราสามารถแทนที่สาย

sys.exit(main())

เช่น

sys.exit(main.main())

ใช่! ขอบคุณสำหรับ "วิธี # 1"!
Ryan Loggerythm

วิธีการ # 2 ทำงานเหมือนมีเสน่ห์! ขอบคุณ !!!
David Aubin

ขอบคุณ! วิธี # 2 ทำงานสำหรับฉัน ฉันกังวลเกี่ยวกับมันเพราะฉันกลัวว่ามันจะล้มเหลวในครั้งต่อไปที่ฉันอัปเดต /Applications/Xcode.app/Contents/Developer/usr/bin/pip3
Jetpack


1

เท่าที่เห็นที่นี่คุณควรจะสามารถแก้ปัญหานี้ได้โดยการเรียกใช้โมดูลจาก Python โดยตรงเช่น

python -m pip install --upgrade pip

1

ใน Windows ให้แก้ไข C: \ ProgramData \ Anaconda3 \ Scripts \ pip-script.py และแทนที่

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

แทนที่บรรทัดสุดท้ายด้วย sys.exit (main.main ())

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