cài đặt pip /usr/local/opt/python/bin/python2.7: trình thông dịch không hợp lệ: Không có tệp hoặc thư mục như vậy


90

Tôi không biết thỏa thuận là gì nhưng tôi đang mắc kẹt khi làm theo một số giải pháp stackoverflow mà chẳng đi đến đâu. Bạn có thể vui lòng giúp tôi về điều này?

  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

Câu trả lời:


168

Tôi đã sử dụng home-brew để cài đặt 2.7 trên OS X 10.10 và bản cài đặt mới bị thiếu các liên kết sym. Tôi đã chạy

brew link --overwrite python

như đã đề cập trong Làm thế nào để liên kết biểu tượng python trong Homebrew? và nó đã giải quyết được vấn đề.


6
Điều đó đã cứu tôi. FWIW, tôi đã phải thực hiện ba bước để sửa lỗi Python của mình trên El Capitan: brew install python; ủ trăn linkapps; liên kết bia - ghi chú trăn
Saish

làm thế nào để làm mặt trái của điều đó?
bubakazouba

3
đảo ngược: nấu python bỏ liên kết
Anders B

1
Chỉ để thêm vào điều này. Tôi thấy rằng tôi phải chạy "xcode-select --install" vì bất kỳ lý do gì. "brew reinstall python" sẽ không hoạt động cho đến khi tôi làm điều đó. Trong trường hợp cụ thể của tôi, tôi đã sử dụng trợ lý di chuyển để di chuyển từ máy tính vật lý này sang máy tính khác. Sau hai điều đó, mọi thứ đã được giải quyết và pip3 hoạt động.
chrisallick

Python đã được liên kết chính xác cho tôi, điều đã giúp được pip3 install --upgrade pip@Excalibur chỉ ra trong một bình luận ở phần dưới.
retrovertigo

57

Tôi đoán bạn có hai lần cài đặt python hoặc hai lần cài đặt pip, một trong số đó đã bị xóa một phần.

Tại sao bạn sử dụng sudo? Lý tưởng nhất là bạn có thể cài đặt và chạy mọi thứ từ tài khoản người dùng của mình thay vì sử dụng root. Nếu bạn kết hợp tài khoản gốc và tài khoản cục bộ với nhau, bạn có nhiều khả năng gặp phải vấn đề về quyền (ví dụ: xem cảnh báo mà nó đưa ra về "thư mục mẹ không thuộc sở hữu của người dùng hiện tại").

Bạn nhận được gì nếu chạy cái này?

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

Điều này sẽ cho bạn biết tệp nhị phân python nào pipđang cố gắng sử dụng. Nếu nó đang trỏ /usr/local/opt/python/bin/python2.7, thì hãy thử chạy cái này:

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

Nếu điều này cho biết "Không có tệp hoặc thư mục như vậy", thì pip đang cố gắng sử dụng tệp nhị phân python đã bị xóa.

Tiếp theo, hãy thử điều này:

$ which python
$ which python2.7

Để xem đường dẫn của tệp nhị phân python đang thực sự hoạt động.

Vì có vẻ như pip đã được cài đặt thành công ở đâu đó, có thể đó /usr/local/bin/piplà một phần của bản cài đặt pip cũ hơn, cao hơn trên PATH. Để kiểm tra điều đó, bạn có thể thử di chuyển pipnhị phân không hoạt động theo cách như sau (có thể yêu cầu sudo):

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

Sau đó, hãy thử chạy lại pip --versionlệnh của bạn . Hy vọng rằng nó chọn đúng phiên bản và chạy thành công.


những lời giải thích tuyệt vời. Ghi chú bên lề: việc phải gỡ lỗi trình quản lý gói của một ngôn ngữ được cài đặt để đưa một dự án ra khỏi sự tàn nhẫn là điều khiến tôi mất niềm tin vào tất cả những thứ máy tính đó. oops .. Và bây giờ cho một lỗi mới python "AttributeError kho địa phương"
nicolas

1
Tôi gặp vấn đề tương tự, nhưng điều này không hiệu quả với tôi, ngay cả sau khi làm theo các hướng dẫn này. PIP vẫn đang sử dụng một đường dẫn không chính xác. Có cách nào khác để làm điều này không?
Adam Starrh

5
Tôi đã phải cài đặt pip: sudo /usr/bin/easy_install pip- Tìm thấy nó ở đây: stackoverflow.com/questions/27308234/…
Adam Starrh

Vấn đề là nếu điều đó là phiên bản duy nhất của pip được cài đặt thì bạn đang trên may mắn
einarc

55

Giải pháp duy nhất trong OSX và biến thể của nó.

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

1
Cố gắng trình bày câu trả lời một cách liền mạch và đơn giản.
TheExorcist

Điều này có thể có tác dụng phụ trên các chương trình khác sử dụng python. Hơn nữa, thời gian kết thúc vòng đời của Python 2 là ngày 1 tháng 1 năm 2020 và các nhà phát triển của nó đã chỉ ra rằng cuối cùng (hoặc trong một số môi trường) "python" không có công cụ sửa đổi nên tham khảo Python 3 python.org/dev/peps / pep-0394
kotoole

@kotoole Từ câu trả lời của bạn, có vẻ như mắt bạn có thể nhìn thấy, nhưng không quan sát được, chỉ cần thay python2.7 bằng python3.x nó sẽ vẫn hoạt động như cũ.
TheExorcist

1
@TheExorcist không may cho tất cả chúng ta, Python2 và Python3 là các ngôn ngữ khác nhau. Mã được viết cho một ngôn ngữ sẽ bị hỏng khi chạy bằng ngôn ngữ kia. Việc thay thế python bằng bán buôn python2.7 dường như rất có khả năng phá vỡ các ứng dụng khác. Giải pháp này "hoạt động" giống như cách xóa cửa trước của bạn hoạt động khi bạn quên chìa khóa. Nó giúp bạn vượt qua, nhưng đừng khóc khi ngôi nhà của bạn bắt đầu đầy bọ.
kotoole

@kotoole, bạn nói đúng, nhưng đôi khi chúng ta phải làm những gì chúng ta cần làm vào lúc này.
TheExorcist

32

Pip sửa chữa

Đối với lỗi này:

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

Nguồn gốc của vấn đề này là một đường dẫn python không hợp lệ được mã hóa bằng pip (có nghĩa là nó sẽ không được khắc phục bằng cách thay đổi $ PATH của bạn). Đường dẫn đó không còn được mã hóa cứng trong phiên bản mới nhất của pip, do đó, một giải pháp sẽ hoạt động là:

pip install --upgrade pip

Nhưng tất nhiên, lệnh này sử dụng pip, vì vậy nó không thành công với cùng một lỗi.

Cách để giúp bạn thoát khỏi mớ hỗn độn này:

  1. Chạy which pip
  2. Mở tệp đó trong trình soạn thảo văn bản
  3. Thay đổi dòng đầu tiên từ #!/usr/local/opt/python/bin/python2.7ví dụ #!/usr/local/opt/python2/bin/python2.7(lưu ý python2 trong đường dẫn) hoặc bất kỳ đường dẫn nào đến trình thông dịch python đang hoạt động trên máy của bạn.
  4. Bây giờ, pip install --upgrade pip(điều này ghi đè bản hack của bạn và làm cho pip hoạt động ở phiên bản mới nhất, nơi vấn đề thông dịch sẽ được khắc phục)

Sửa chữa virtualenv

Đối với tôi, tôi đã tìm thấy vấn đề này do lần đầu tiên gặp sự cố giống hệt từ virtualenv:

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

Giải pháp ở đây là chạy

pip uninstall virtualenv
pip install virtualenv

Nếu chạy lệnh đó có cùng một lỗi từ pip, hãy xem ở trên.


1
Đúng vậy, tôi đã có Python 2.7 và 3.6 trên Mac OSX, sau đó nâng cấp lên 3.6, tôi đã gặp sự cố này. Đây là giải pháp phù hợp với tôi ( pip3 install --upgrade pip)
Excalibur

Nope: pip Traceback (gần đây nhất gọi cuối cùng): File "/ usr / local / bin / pip", dòng 7, trong <module> từ pip._internal nhập khẩu ImportError chính: Không có mô-đun tên pip._internal
einarc

@Excalibur Tôi đã thêm giải pháp của bạn dưới dạng nhận xét dưới câu trả lời được chấp nhận. Cảm ơn vì điều đó!
retrovertigo

26

Tôi đã mắc lỗi tương tự khi sử dụng sudo cho cài đặt của mình. (Giáo sư)

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

Điều này đã đưa mọi thứ trở lại bình thường.


22
linkapps không được dùng nữa
Steve

15

Vì tôi đã cài đặt cả python 2 và 3 trên Mac OSX, nên tôi đã gặp phải tất cả các loại lỗi.

Tôi đã sử dụng cái nào để tìm vị trí của tệp python2.7 của mình (/usr/local/bin/python2.7)

which python2.7

Sau đó, tôi đã liên kết biểu tượng vị trí cài đặt python2.7 thực của mình với vị trí mà tập lệnh mong đợi:

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

2
Cứu sinh! Cảm ơn bạn.
Brian Fegter

12

Tôi đã có vấn đề tương tự. Về cơ bản, pip đã tìm sai đường dẫn (đường dẫn cài đặt cũ) hoặc python. Giải pháp sau đây phù hợp với tôi:

  • Tôi đã kiểm tra vị trí của đường dẫn python (thử which python)
  • Tôi đã kiểm tra dòng đầu tiên trên tệp pip ( /usr/local/bin/pip2.7/usr/local/bin/pip). Dòng phải nêu đúng đường dẫn đến đường dẫn python. Trong trường hợp của tôi, không. Tôi đã sửa nó và bây giờ nó hoạt động tốt.

9

Trong trường hợp nó giúp ích cho bất kỳ ai, giải pháp được đề cập trong câu hỏi khác này đã hiệu quả với tôi khi pip ngừng hoạt động hôm nay sau khi nâng cấp nó: Pip bị hỏng sau khi nâng cấp

Có vẻ như đó là sự cố khi vị trí đã lưu trong bộ nhớ cache trước đó thay đổi, vì vậy bạn có thể làm mới bộ nhớ cache bằng lệnh này:

hash -r

9

Để đơn giản hóa thao tác, chúng ta có thể sử dụng lệnh dưới đây để cài đặt lại phiên bản 2:

brew install python@2

Sau đó, trên máy Mac của tôi, nó trông như dưới đây:

▶ 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
Đối với cài đặt lại có reinstalllệnh trong brew:brew reinstall python@2
Valeriy Văn

4

Tôi gặp vấn đề tương tự. Tôi đã cài đặt cả Python 2.7 & 3.6. Python 2.7 đã hoạt virtualenvđộng, nhưng sau khi cài đặt Python3, virtualenv tiếp tục tìm kiếm phiên bản 2.7 và không tìm thấy nó. Đang pip install virtualenvcài đặt phiên bản Python3 của virtualenv.

Sau đó, đối với mỗi lệnh, nếu tôi muốn sử dụng Python2, tôi sẽ sử dụng virtualenv --python=python2.7 somecommand


4

Tôi đã gặp vấn đề tương tự, virtualenv đã trỏ đến một đường dẫn python cũ. Sửa đường dẫn đã giải quyết được sự cố:

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

Điều này đã hiệu quả. Nhưng nó có phải là một sửa chữa lâu dài? Tôi nhận thấy vấn đề này với một số thứ khác, vì vậy điều này sẽ yêu cầu thay đổi nó cho từng trường hợp nó không còn hoạt động nữa và tôi lo ngại về ảnh hưởng lâu dài của điều này.
Jake T.

Chắc chắn không phải là một sửa chữa lâu dài. Trong trường hợp của tôi, tôi đã mắc kẹt với môi trường python của mình, đó là lý do tại sao tôi nghĩ rằng nó gặp phải tình huống này và tìm cách khắc phục nhanh chóng. Tôi nghi ngờ việc gỡ cài đặt virtualenv sau đó cài đặt lại nó bằng một pip python2.7 chức năng sẽ khiến điều này dính vào.
dg

2

Tôi có cùng một vấn đề. Nếu tôi chạy brew link --overwrite python2. Vẫn còn đó 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

Đã giải quyết nó! Bây giờ chúng ta có thể sử dụng vải phiên bản python2.

=== 2018/07/25 cập nhật

Có một cách hợp lý để sử dụng phiên bản python2 fab khi hệ điều hành python của bạn được liên kết với python3. .shcho lệnh của bạn.

# 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

Hi vọng điêu nay co ich.


2

Việc chỉnh sửa dòng đầu tiên của tệp này có tác dụng với tôi:

MBP-de-Jose:~ josejunior$ which python3

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

MBP-de-Jose:~ josejunior$

trước

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

sau

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

2

Tất cả những gì bạn cần làm là ... đóng cửa sổ đầu cuối và mở lại cửa sổ mới để khắc phục sự cố này.

Vấn đề là, đường dẫn python mới không được thêm vào bashrc (Nguồn hoặc cửa sổ đầu cuối mới sẽ giúp ích).


1

Trong trường hợp của tôi, tôi quyết định xóa cài đặt python homebrew khỏi máy mac của mình vì tôi đã có hai phiên bản python khác được cài đặt trên máy mac của mình thông qua MacPorts. Điều này gây ra thông báo lỗi.

Việc cài đặt lại python thông qua brew đã giải quyết được sự cố của tôi.



1

Đối với tôi, trên centOS 7, tôi phải xóa liên kết pip cũ khỏi / bin bằng cách

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

sau đó liên kết lại với

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

Sau đó nếu

/usr/local/bin/pip2.7

Hoạt động, điều này sẽ hoạt động


0

Bạn có thể có hai phiên bản Python và pip khác nhau.

Cố gắng:

pip2 install --upgrade pip và sau đó pip2 install -r requirements.txt

Hoặc pip3nếu bạn đang sử dụng phiên bản Python mới hơn.


0

TLDR: pip được tìm thấy trong đường dẫn a của bạn là một liên kết tượng trưng và vị trí được tham chiếu không còn chứa tệp thực thi nữa. Bạn cần cập nhật liên kết biểu tượng.

Nó giúp hiểu một vài điều.

  • Khi bạn nhập một cái gì đó như pythonhoặc pipbạn os sẽ tìm kiếm /etc/pathsđể cố gắng tìm tệp thực thi được liên kết cho lệnh đó. Bạn có thể xem mọi thứ trong đó bằng cách sử dụng cat /etc/paths.
  • Để xác định vị trí của tệp thực thi mà trình bao của bạn sẽ sử dụng, có một lệnh hữu ích which, bạn có thể nhập which pythonhoặc which pip. Điều này sẽ cho bạn biết vị trí của tệp thực thi mà trình bao của bạn sẽ sử dụng cho lệnh đó.
  • Phần này là then chốt . Vị trí có thể là một tệp thực thi thực tế hoặc không, nó có thể là một liên kết tượng trưng (liên kết tượng trưng).
  • Nó phổ biến /etc/pathsđể chứa /usr/local/bin, nó cũng phổ biến /usr/local/binlà một loạt các liên kết tượng trưng đến các tệp thực thi thực tế. Không phải bản thân các tệp thực thi.
  • Nếu tệp thực thi tại vị trí được tham chiếu liên kết tượng trưng không tồn tại, bạn sẽ gặp lỗi như bad interpreter: No such file or directory

Với điều đó đã được nói, vấn đề có thể piplà một liên kết tượng trưng và tệp thực thi được liên kết có thể không tồn tại ở vị trí đó nữa. Để khắc phục, hãy làm như sau

  1. Tìm vị trí của tệp thực thi - which pip(đưa ra một cái gì đó như thế này /usr/local/bin/pip)
  2. Kiểm tra vị trí tham chiếu liên kết biểu tượng ls -l /usr/local/bin/pip | grep pip(đưa ra một cái gì đó như thế này pip -> /usr/local/opt/python@3.7/bin/pip3)
  3. Kiểm tra xem tệp thực thi có tồn tại ở vị trí được tham chiếu không ls /usr/local/opt/python@3.7/bin/pip3(bạn đang gặp sự cố này nên có thể không).
  4. Xóa liên kết biểu tượng cũ rm -r /usr/local/bin/pip
  5. Tìm piptệp thực thi thực sự nếu sử dụng homebrewnó sẽ ở trong /usr/local/optbạn có thể sử dụng một cái gì đó như ls /usr/local/opt/ | grep pythonđể tìm nó.
  6. Thêm liên kết biểu tượng phù hợp cho tệp thực thi pip. ln -s /usr/local/opt/python@3.7/bin/pip3 /usr/local/bin/pip
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.