การติดตั้ง pip /usr/local/opt/python/bin/python2.7: ตัวแปลที่ไม่ถูกต้อง: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว


94

ฉันไม่รู้ว่าข้อตกลงคืออะไร แต่ฉันติดอยู่กับโซลูชัน stackoverflow บางอย่างซึ่งไม่มีที่ไหนเลย คุณช่วยฉันเรื่องนี้ได้ไหม

  Monas-MacBook-Pro:CS764 mona$ sudo python get-pip.py
    The directory '/Users/mona/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    The directory '/Users/mona/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    /tmp/tmpbSjX8k/pip.zip/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
    Collecting pip
      Downloading pip-7.1.0-py2.py3-none-any.whl (1.1MB)
        100% |████████████████████████████████| 1.1MB 181kB/s 
    Installing collected packages: pip
      Found existing installation: pip 1.4.1
        Uninstalling pip-1.4.1:
          Successfully uninstalled pip-1.4.1
    Successfully installed pip-7.1.0
    Monas-MacBook-Pro:CS764 mona$ pip --version
    -bash: /usr/local/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

คำตอบ:


171

ฉันใช้ home-brew เพื่อติดตั้ง 2.7 บน OS X 10.10 และการติดตั้งใหม่ไม่มีลิงก์ sym ฉันวิ่ง

brew link --overwrite python

ตามที่กล่าวไว้ในHow to symlink python ใน Homebrew? และแก้ไขปัญหาได้


6
ที่ช่วยฉัน FWIW ฉันต้องทำสามขั้นตอนเพื่อแก้ไข Python บน El Capitan: ชงติดตั้ง python; linkapps ชง python; ลิงค์ชง
Saish

จะทำอย่างไรกลับกัน
bubakazouba

3
ย้อนกลับ: ชงยกเลิกการลิงก์หลาม
Anders B

1
เพียงเพื่อเพิ่มสิ่งนี้ ฉันพบว่าฉันต้องเรียกใช้ "xcode-select --install" ด้วยเหตุผลใดก็ตาม "ชงติดตั้งหลามใหม่" จะใช้ไม่ได้จนกว่าฉันจะทำเช่นนั้น ในกรณีเฉพาะของฉันฉันใช้ผู้ช่วยในการย้ายข้อมูลเพื่อย้ายจากคอมพิวเตอร์จริงเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง หลังจากทั้งสองสิ่งนั้นทุกอย่างก็คลี่คลายและ pip3 ใช้งานได้
chrisallick

2
Python เชื่อมโยงอย่างถูกต้องสำหรับฉันแล้วสิ่งที่ช่วยได้pip3 install --upgrade pipตามที่ @Excalibur ชี้ให้เห็นในวิธีแสดงความคิดเห็นเพิ่มเติม
retrovertigo

58

ฉันเดาว่าคุณมีการติดตั้ง python สองครั้งหรือการติดตั้ง pip สองรายการซึ่งหนึ่งในนั้นถูกลบออกไปบางส่วน

ทำไมคุณถึงใช้sudo? ตามหลักการแล้วคุณควรจะสามารถติดตั้งและเรียกใช้ทุกอย่างจากบัญชีผู้ใช้ของคุณแทนที่จะใช้รูท หากคุณผสมรูทและบัญชีภายในของคุณเข้าด้วยกันคุณมีแนวโน้มที่จะประสบปัญหาเกี่ยวกับสิทธิ์ (เช่นดูคำเตือนเกี่ยวกับ "ไดเร็กทอรีหลักไม่ได้เป็นของผู้ใช้ปัจจุบัน")

คุณจะได้อะไรถ้าคุณเรียกใช้สิ่งนี้?

$ head -n1 /usr/local/bin/pip

นี่จะแสดงให้คุณเห็นว่าไบนารี python ตัวpipใดที่พยายามใช้ หากมันชี้/usr/local/opt/python/bin/python2.7ให้ลองเรียกใช้สิ่งนี้:

$ ls -al /usr/local/opt/python/bin/python2.7

หากข้อความนี้ระบุว่า "ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว" แสดงว่า pip พยายามใช้ไบนารี python ที่ถูกลบออกไป

จากนั้นลองทำดังนี้

$ which python
$ which python2.7

เพื่อดูเส้นทางของไบนารี python ที่ใช้งานได้จริง

เนื่องจากดูเหมือนว่า pip ได้รับการติดตั้งสำเร็จแล้วบางแห่งอาจเป็นได้ว่า/usr/local/bin/pipเป็นส่วนหนึ่งของการติดตั้ง pip รุ่นเก่าที่สูงกว่าในไฟล์PATH. ในการทดสอบคุณอาจลองย้ายpipไบนารีที่ไม่ทำงานออกไปในลักษณะนี้ (อาจต้องใช้sudo):

$ mv /usr/local/bin/pip /usr/local/bin/pip.old

จากนั้นลองเรียกใช้pip --versionคำสั่งของคุณอีกครั้ง หวังว่าจะเลือกเวอร์ชันที่ถูกต้องและทำงานได้สำเร็จ


คำอธิบายที่ดี Sidenote: การต้องดีบักโปรแกรมจัดการแพ็กเกจของภาษาที่ติดตั้งเพื่อให้โปรเจ็กต์ออกมาจากความเมตตาคือสิ่งที่ทำให้ฉันหมดศรัทธาในคอมพิวเตอร์เหล่านั้นทั้งหมด อ๊ะ .. และตอนนี้ข้อผิดพลาด python ใหม่ "AttributeError local repository"
nicolas

1
ฉันมีปัญหาเดียวกัน แต่ไม่ได้ผลสำหรับฉันแม้ว่าจะทำตามคำแนะนำเหล่านี้แล้วก็ตาม PIP ยังคงใช้เส้นทางที่ไม่ถูกต้อง มีวิธีอื่นที่จะไปเกี่ยวกับเรื่องนี้หรือไม่?
Adam Starrh

5
ฉันต้องติดตั้ง pip: sudo /usr/bin/easy_install pip- พบได้ที่นี่: stackoverflow.com/questions/27308234/…
Adam Starrh

ปัญหาคือถ้านั่นเป็นเวอร์ชันเดียวของ pip ที่ติดตั้งแสดงว่าคุณโชคไม่ดี
einarc

55

โซลูชันเฉพาะใน OSX และตัวแปรเท่านั้น

ln -s /usr/local/bin/python /usr/local/opt/python/bin/python2.7

1
พยายามนำเสนอคำตอบอย่างราบรื่นและเรียบง่าย
TheExorcist

สิ่งนี้มีแนวโน้มที่จะมีผลข้างเคียงกับโปรแกรมอื่น ๆ ที่ใช้ python ยิ่งไปกว่านั้นการสิ้นสุดอายุการใช้งานของ Python 2 คือวันที่ 1 มกราคม 2020 และผู้พัฒนาระบุว่าในที่สุด (หรือในบางสภาพแวดล้อมแล้ว) "python" ที่ไม่มีตัวปรับเปลี่ยนควรอ้างถึง Python 3 python.org/dev/peps / pep-0394
kotoole

@kotoole จากคำตอบของคุณดูเหมือนว่าตาของคุณสามารถมองเห็นได้ แต่ไม่สามารถสังเกตได้เพียงแค่แทนที่ python2.7 ด้วย python3.x มันจะยังคงใช้งานได้เหมือนเดิม
TheExorcist

1
@TheExorcist น่าเสียดายสำหรับพวกเราทุกคน Python2 และ Python3 เป็นภาษาที่แตกต่างกัน รหัสที่เขียนขึ้นสำหรับภาษาหนึ่งจะหยุดทำงานเมื่อทำงานในอีกภาษาหนึ่ง การแทนที่ python ด้วยการขายส่ง python2.7 ดูเหมือนว่าจะมีโอกาสสูงที่จะทำลายแอปพลิเคชันอื่น ๆ วิธีนี้ "ใช้ได้ผล" เช่นเดียวกับการลบประตูหน้าบ้านเมื่อคุณลืมกุญแจ มันทำให้คุณผ่านพ้นไปได้ แต่อย่ามาร้องไห้เมื่อบ้านของคุณเริ่มเต็มไปด้วยแมลง
kotoole

@kotoole offcourse คุณพูดถูก แต่บางครั้งเราก็ต้องทำในสิ่งที่เราต้องทำในขณะนี้
TheExorcist

34

แก้ไข pip

สำหรับข้อผิดพลาดนี้:

~/Library/Python/2.7/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

ต้นตอของปัญหานี้คือพา ธ python ที่ไม่ถูกต้องฮาร์ดโค้ดใน pip (ซึ่งหมายความว่าจะไม่ได้รับการแก้ไขโดยการเปลี่ยน $ PATH ของคุณ) เส้นทางนั้นไม่ได้ถูกเข้ารหัสใน pip เวอร์ชันล่าสุดอีกต่อไปดังนั้นวิธีแก้ปัญหาที่ควรใช้คือ:

pip install --upgrade pip

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

วิธีบูตตัวเองออกจากความยุ่งเหยิงนี้:

  1. วิ่ง which pip
  2. เปิดไฟล์นั้นในโปรแกรมแก้ไขข้อความ
  3. เปลี่ยนบรรทัดแรกจาก#!/usr/local/opt/python/bin/python2.7เป็นเช่น#!/usr/local/opt/python2/bin/python2.7(สังเกต python2 ในเส้นทาง) หรือเส้นทางใด ๆ ไปยังล่ามหลามที่ใช้งานได้บนเครื่องของคุณ
  4. ตอนนี้pip install --upgrade pip(สิ่งนี้จะเขียนทับการแฮ็กของคุณและทำให้ pip ทำงานในเวอร์ชันล่าสุดซึ่งควรแก้ไขปัญหาล่าม)

แก้ไข Virtualenv

สำหรับฉันฉันพบปัญหานี้โดยมีปัญหาที่เหมือนกันจาก Virtualenv ก่อน:

~/Library/Python/2.7/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

ทางออกที่นี่คือการเรียกใช้

pip uninstall virtualenv
pip install virtualenv

หากการรันคำสั่งนั้นทำให้เกิดข้อผิดพลาดเดียวกันจาก pip ดูด้านบน


1
ใช่เมื่อมี Python 2.7 และ 3.6 บน Mac OSX จากนั้นอัปเกรดเป็น 3.6 ฉันมีปัญหานี้ นี่เป็นวิธีแก้ปัญหาที่เหมาะกับฉัน ( pip3 install --upgrade pip)
Excalibur

Nope: pip Traceback (โทรล่าสุดล่าสุด): ไฟล์ "/ usr / local / bin / pip" บรรทัดที่ 7 ใน <โมดูล> จากการนำเข้าหลัก pip._internal ImportError: ไม่มีโมดูลชื่อ pip._internal
einarc

@Excalibur ฉันเพิ่มโซลูชันของคุณเป็นความคิดเห็นภายใต้คำตอบที่ยอมรับ ขอบคุณสำหรับสิ่งนั้น!
retrovertigo

26

ฉันทำข้อผิดพลาดเดียวกันโดยใช้ sudo สำหรับการติดตั้งของฉัน (โอ๊ะ)

brew install python
brew linkapps python
brew link --overwrite python 

สิ่งนี้ทำให้ทุกอย่างกลับมาเป็นปกติ


22
linkapps เลิกใช้งานแล้ว
Steve

15

เนื่องจากฉันมีทั้ง python 2 และ 3 ติดตั้งบน Mac OSX ฉันจึงมีข้อผิดพลาดทุกประเภท

ฉันใช้เพื่อค้นหาตำแหน่งของไฟล์ python2.7 ของฉัน (/usr/local/bin/python2.7)

which python2.7

จากนั้นฉันเชื่อมโยงตำแหน่งการติดตั้ง python2.7 จริงของฉันด้วยสิ่งที่สคริปต์คาดหวัง:

ln -s /usr/local/bin/python2.7 /usr/local/opt/python/bin/python2.7

2
ช่วยชีวิต! ขอขอบคุณ.
Brian Fegter

13

ฉันมีปัญหาที่คล้ายกัน โดยทั่วไปแล้ว pip กำลังมองหาเส้นทางที่ไม่ถูกต้อง (เส้นทางการติดตั้งเก่า) หรือ python วิธีแก้ปัญหาต่อไปนี้ใช้ได้ผลสำหรับฉัน:

  • ฉันตรวจสอบว่าเส้นทาง python อยู่ที่ไหน (ลอง which python )
  • ฉันตรวจสอบบรรทัดแรกในไฟล์ pip ( /usr/local/bin/pip2.7และ/usr/local/bin/pip) เส้นควรระบุเส้นทางที่ถูกต้องไปยังเส้นทาง python ในกรณีของฉันไม่ได้ ฉันแก้ไขแล้วและตอนนี้ก็ใช้ได้ดี

9

ในกรณีที่ช่วยทุกคนวิธีแก้ปัญหาที่กล่าวถึงในคำถามอื่นนี้ใช้ได้ผลกับฉันเมื่อ pip หยุดทำงานในวันนี้หลังจากอัปเกรด: Pip เสียหลังจากอัปเกรด

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

hash -r

9

เพื่อให้การทำงานง่ายขึ้นเราสามารถใช้คำสั่งด้านล่างเพื่อติดตั้งเวอร์ชัน 2 ใหม่:

brew install python@2

จากนั้นบน Mac ของฉันจะมีลักษณะดังนี้:

▶ python -V
Python 2.7.10

▶ python2 -V
Python 2.7.14

▶ python3 -V
Python 3.6.5

▶ pip2 -V
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

▶ pip3 -V
pip 9.0.3 from /usr/local/lib/python3.6/site-packages (python 3.6)

▶ pip --version
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

1
สำหรับการติดตั้งใหม่มีreinstallคำสั่งในbrew:brew reinstall python@2
Valeriy Van

5

ฉันมีปัญหาเดียวกัน Virtualenv กำลังชี้ไปที่เส้นทางหลามเก่า การแก้ไขเส้นทางช่วยแก้ปัญหา:

$ virtualenv -p python2.7 env
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

$ which python2.7
/opt/local/bin/python2.7

# needed to change to correct python path
$ head  /usr/local/bin/virtualenv
#!/usr/local/opt/python/bin/python2.7 <<<< REMOVED THIS LINE
#!/opt/local/bin/python2.7 <<<<< REPLACED WITH CORRECT PATH

# now it works:
$ virtualenv -p python2.7 env
Running virtualenv with interpreter /opt/local/bin/python2.7
New python executable in env/bin/python
Installing setuptools, pip...done.

สิ่งนี้ได้ผล แต่เป็นการแก้ไขระยะยาวหรือไม่? ฉันสังเกตเห็นปัญหานี้กับสิ่งอื่น ๆ อีกสองสามอย่างดังนั้นสิ่งนี้จะต้องมีการเปลี่ยนแปลงสำหรับแต่ละอินสแตนซ์ซึ่งจะใช้ไม่ได้อีกต่อไปและฉันกังวลเกี่ยวกับผลกระทบระยะยาวของสิ่งนี้
Jake T.

ไม่ใช่การแก้ไขในระยะยาวแน่นอน ในกรณีของฉันฉันจมอยู่กับสภาพแวดล้อม python ของฉันซึ่งเป็นสาเหตุที่ฉันคิดว่ามันเข้าสู่สถานการณ์นี้และมองหาวิธีแก้ไขอย่างรวดเร็ว ฉันสงสัยว่าการถอนการติดตั้ง Virtualenv จากนั้นติดตั้งใหม่ด้วย python2.7 pip ที่ใช้งานได้จะทำให้แท่งนี้
dg

4

ฉันมีปัญหาเดียวกัน ฉันติดตั้งทั้ง Python 2.7 และ 3.6 แล้ว Python 2.7 virtualenvใช้งานได้แต่หลังจากติดตั้ง Python3 แล้ว Virtualenv ยังคงมองหาเวอร์ชัน 2.7 และไม่พบ กำลังทำpip install virtualenvติดตั้งรุ่น Python3 ของ virtualenv

จากนั้นสำหรับแต่ละคำสั่งถ้าฉันต้องการใช้ Python2 ฉันจะใช้ virtualenv --python=python2.7 somecommand


2

ฉันมีปัญหาเดียวกัน ถ้าฉันวิ่งbrew link --overwrite python2. zsh: /usr/local/bin//fab: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directoryยังคงมี

cd /usr/local/opt/
mv python2 python

แก้ได้! ตอนนี้เราสามารถใช้ python2 version fabric

=== อัปเดต 2018/07/25

มีวิธีที่สะดวกในการใช้ python2 version fab เมื่อ os python ของคุณเชื่อมโยงกับ python3 .shสำหรับคำสั่งของคุณ

# fab python2
cd /usr/local/opt
rm python
ln -s python2 python

# use the fab cli
...

# link to python3
cd /usr/local/opt
rm python
ln -s python3 python

หวังว่านี่จะช่วยได้


2

การแก้ไขบรรทัดแรกของไฟล์นี้ใช้ได้ผลกับฉัน:

MBP-de-Jose:~ josejunior$ which python3

/usr/local/Cellar/python/3.7.3/bin/python3

MBP-de-Jose:~ josejunior$

ก่อน

#!/usr/local/opt/python/bin/python3.7

หลังจาก

#!/usr/local/Cellar/python/3.7.3/bin/python3

2

สิ่งที่คุณต้องทำคือ ... ปิดหน้าต่างเทอร์มินัลแล้วเปิดใหม่อีกครั้งเพื่อแก้ไขปัญหานี้

ปัญหาคือไม่มีการเพิ่มเส้นทาง python ใหม่ใน bashrc (ไม่ว่าจะเป็นซอร์สหรือหน้าต่างเทอร์มินัลใหม่จะช่วยได้)


1

ในกรณีของฉันฉันตัดสินใจที่จะลบการติดตั้ง homebrew python ออกจาก mac ของฉันเนื่องจากฉันมี python อีกสองเวอร์ชันที่ติดตั้งบนเครื่อง Mac ของฉันผ่าน MacPorts แล้ว สิ่งนี้ทำให้เกิดข้อความแสดงข้อผิดพลาด

การติดตั้ง python ใหม่ผ่านการชงช่วยแก้ปัญหาของฉันได้



1

สำหรับฉันใน centOS 7 ฉันต้องลบ pip link เก่าออกจาก / bin by

rm /bin/pip2.7 
rm /bin/pip

จากนั้นเชื่อมโยงอีกครั้งด้วย

sudo ln -s  /usr/local/bin/pip2.7 /bin/pip2.7

แล้วถ้า

/usr/local/bin/pip2.7

ใช้งานได้ควรใช้งานได้



0

TLDR: pipพบในเส้นทางของคุณ a คือ symlink และตำแหน่งที่อ้างอิงไม่มีไฟล์ปฏิบัติการอีกต่อไป คุณต้องอัปเดต symlink

ช่วยให้เข้าใจสองสิ่ง

  • เมื่อคุณพิมพ์สิ่งที่ต้องการpythonหรือระบบpipปฏิบัติการของคุณจะค้นหา/etc/pathsเพื่อพยายามค้นหาไฟล์ปฏิบัติการที่เกี่ยวข้องสำหรับคำสั่งนั้น cat /etc/pathsคุณสามารถเห็นทุกอย่างในนั้นโดยใช้
  • ในการกำหนดตำแหน่งของไฟล์ปฏิบัติการที่เชลล์ของคุณจะใช้มีคำสั่งที่มีประโยชน์whichคุณสามารถพิมพ์which pythonหรือwhich pip. สิ่งนี้จะบอกตำแหน่งของไฟล์ปฏิบัติการที่เชลล์ของคุณจะใช้สำหรับคำสั่งนั้น
  • ส่วนนี้เป็นกุญแจสำคัญ ตำแหน่งที่ตั้งอาจเป็นหรือไม่สามารถเรียกใช้งานได้จริงอาจเป็นลิงก์สัญลักษณ์ (symlink)
  • มันเป็นเรื่องปกติที่/etc/pathsจะมี/usr/local/binมันเป็นเรื่องธรรมดาสำหรับ/usr/local/binการรวมซิมลิงค์ไปยังไฟล์ปฏิบัติการจริง ไม่ใช่ไฟล์ปฏิบัติการเอง
  • หากไฟล์ปฏิบัติการที่ตำแหน่งอ้างอิง symlinks ไม่มีอยู่คุณจะได้รับข้อผิดพลาดเช่น bad interpreter: No such file or directory

ด้วยเหตุนี้ปัญหาจึงน่าpipจะเป็น symlink และไฟล์ปฏิบัติการที่เชื่อมโยงอาจไม่มีอยู่ในตำแหน่งนั้นอีกต่อไป ในการแก้ไขให้ทำดังต่อไปนี้

  1. ค้นหาตำแหน่งของไฟล์ปฏิบัติการ - which pip(ให้อะไรประมาณนี้/usr/local/bin/pip )
  2. ตรวจสอบตำแหน่งอ้างอิง symlink ls -l /usr/local/bin/pip | grep pip(ระบุสิ่งนี้pip -> /usr/local/opt/python@3.7/bin/pip3)
  3. ตรวจสอบว่าไฟล์ปฏิบัติการมีอยู่ในตำแหน่งที่อ้างอิงหรือไม่ls /usr/local/opt/python@3.7/bin/pip3(คุณกำลังมีปัญหานี้จึงอาจไม่เป็นเช่นนั้น)
  4. ลบ symlink เก่า rm -r /usr/local/bin/pip
  5. ค้นหาpipปฏิบัติการจริงหากใช้homebrewมันจะอยู่ในตัว/usr/local/optคุณสามารถใช้สิ่งที่ต้องการls /usr/local/opt/ | grep pythonค้นหาได้
  6. เพิ่ม symlink ที่ถูกต้องสำหรับ pip ปฏิบัติการ ln -s /usr/local/opt/python@3.7/bin/pip3 /usr/local/bin/pip
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.