pidcat icon indicating copy to clipboard operation
pidcat copied to clipboard

`pidcat` installed via `brew` no longer works on macOS 12.3, due to Python 2 having been removed

Open oscarnylander opened this issue 3 years ago • 19 comments

Hey!

First off, thank you for the great util, Jake. And all the other cool stuff you've built througout the years.

I'm having an issue where pidcat, installed from brew, can no longer run on macOS 12.3. I believe this is because of Python 2 having been removed on this version of macOS.

I'm getting the following output, when attempting to run pidcat:

~ pidcat
zsh: /opt/homebrew/bin/pidcat: bad interpreter: /usr/bin/python: no such file or directory

This in turn is caused by https://github.com/JakeWharton/pidcat/blob/44b4a106bb25776cbb551044b303520a07a51c1e/pidcat.py#L1:

#!/usr/bin/python -u

On macOS 12.3, /usr/bin/python does not exist - only /usr/bin/python3.

Running on the latest development version (as listed in the current README.md, does not solve the issue, as it still looks for python, which still does not exist.

One alternative that could resolve the issue would be to update pidcat to explicitly try to use python3, but this would have some less desirable backwards compatibility issues, perhaps.

oscarnylander avatar Mar 23 '22 10:03 oscarnylander

Having the same issue here.

Quick hack:

install python 2 via brew: brew install python@2

Then in pidcat.py change

#!/usr/bin/python -u

to

#!/usr/local/Cellar/python@2/2.7.15_1/bin/python2 -u

(Might vary depending on the exact installed version of python 2.)

jox avatar Mar 24 '22 19:03 jox

The fix applied in #179 makes pidcat work with Python 3. Should that PR be merged, consumers of the script could simply symlink python to python3.

oscarnylander avatar Mar 25 '22 13:03 oscarnylander

Simply symlinking python to python3 isn't a good idea. First of all, it is not "simple" on macOS due to SIP since OS X 10.11. Secondly, it might produce confusion and unexpected results on other ends (e.g. Python things that expect python to be Python 2).

The real solution would be to fully depend Pidcat on Python 3. It's also about time, since Python 2 has long-since reached end of life.

jox avatar Mar 25 '22 14:03 jox

Any updates on this ? Should we make pidcat compatible with python 3 and simply replace python link with python3 in pidcat.py ?

rlemasquerier avatar Mar 30 '22 14:03 rlemasquerier

I got the same error on my Apple M1.

I installed pidcat 2.1.0 via homebrew and python 3.8 by miniconda.

The error is caused by the first line of local pidcat file(path: /opt/homebrew/Cellar/pidcat/2.1.0/bin/pidcat):

#!/usr/bin/python -u

I just replaced it with: #!/usr/bin/env -S python -u, according to the latest version: https://github.com/JakeWharton/pidcat/blob/61cd1ee1beabfa14eb5fbe21eb90c192d96aebc5/pidcat.py#L1

Don't forget to add write permission to the local pidcat file:

chmod +w /opt/homebrew/Cellar/pidcat/2.1.0/bin/pidcat

iamwent avatar Apr 20 '22 14:04 iamwent

I tried installing the latest from master (brew install --HEAD pidcat), verified that the first line of the script is:

#!/usr/bin/env -S python -u

But I still get an error: env: python: No such file or directory when running it.

If I try changing the python in #!/usr/bin/env -S python -u by python3, pidcat runs, but instead of colors, I get lines in the shape of:

b'\x1b[33m GestureDetector\x1b[0m \x1b[30;102m I \x1b[0m obtain mCurrentMotionEventRaw. action: 2 id: 629418386'

Any hints?

brAzzi64 avatar May 02 '22 03:05 brAzzi64

This might be fixed in #179. It also should fix #178.

erikhuizinga avatar May 03 '22 07:05 erikhuizinga

switching to --HEAD fixed it in a way that you can get logs now, but as the comment above. there's no coloring anymore and the ansi color codes are showing instead as part of the log.

gustavoriveray avatar May 04 '22 18:05 gustavoriveray

OK I actually modified the local file as #179 suggests and the whole thing (get colored pretty logs) works now

gustavoriveray avatar May 04 '22 18:05 gustavoriveray

I used to do the following for getting the logs saved into an html file with colors for sharing

pidcat package | aha --title 'some title' > ~/Desktop/filename.html

After the changes in my comments above I can get colored logs in my terminal but they end in plain black text on the html. Any idea why?

gustavoriveray avatar May 04 '22 20:05 gustavoriveray

Having the same issue here.

Quick hack:

install python 2 via brew: brew install python@2

Then in pidcat.py change

#!/usr/bin/python -u

to

#!/usr/local/Cellar/python@2/2.7.15_1/bin/python2 -u

(Might vary depending on the exact installed version of python 2.)

No formulae found in taps.

jiechic avatar May 11 '22 02:05 jiechic

I was able to fix it with following steps:

# Use pyenv to install python2 with:
brew install pyenv
pyenv install 2.7.18
 
# Optionally set it to your global default:
pyenv global 2.7.18
 
# Create Alias in .zshrc
alias python=/Users/<user>/.pyenv/versions/2.7.18/bin/python
 
# Reload shell and test
source .zshrc
python -V

# Edit shebang line of Pidcat script
sudo nano "$(which pidcat)"

# Replace first line:
#!/Users/<user>/.pyenv/versions/2.7.18/bin/python -u

rafaelmaeuer avatar May 11 '22 16:05 rafaelmaeuer

@rafaelmaeuer has the right answer! This worked for me as well, on macOS 12.3.1.

I would recommend creating an alias python2 or python27 or something similar, and keeping python3 as your default python version.

erawhctim avatar May 12 '22 22:05 erawhctim

rafaelmaeuer's solution also worked for me.

MalcolmMcFly avatar Jul 04 '22 19:07 MalcolmMcFly

I didn't want to set it as a default, neither use an alias and this is my workaround based on rafael's:

# Workarounds for Pidcat.
# https://github.com/JakeWharton/pidcat/issues/180#issuecomment-1124019329
brew install pyenv
pyenv install 2.7.18

# Pidcat.
brew install pidcat

# Change pidcat to use Python 2.7.18
sudo sed -i '1d' "$(which pidcat)"
sudo sed -i "1i #\!$HOME/.pyenv/versions/2.7.18/bin/python -u" "$(which pidcat)"

vanniktech avatar Jul 17 '22 10:07 vanniktech

My workaround for Apple M1:

$ chmod +w /opt/homebrew/Cellar/pidcat/HEAD-61cd1ee/bin/pidcat
$ sed -i '' '1 s/python/python3/' /opt/homebrew/Cellar/pidcat/HEAD-61cd1ee/bin/pidcat

🤓

Fi5t avatar Jul 25 '22 18:07 Fi5t

Similar to Raphael's solution, I used pyenv to install version 2.7.18 and set it as global python:

pyenv install 2.7.18
pyenv global 2.7.18

Then I changed the /usr/local/Cellar/pidcat/<pidcat-version>/bin/pidcat shebang as follows:

#!/usr/bin/env python -u

I used /usr/bin/env python instead of hardcoding the path to a single user so that all the user accounts on my Mac can use it as I use multiple users on my machine.

techygrrrl avatar Sep 06 '22 23:09 techygrrrl

Hi @brAzzi64! Did you manage to solve this colors issue?

[EDIT] Just found it! :-)

I tried installing the latest from master (brew install --HEAD pidcat), verified that the first line of the script is:

#!/usr/bin/env -S python -u

But I still get an error: env: python: No such file or directory when running it.

If I try changing the python in #!/usr/bin/env -S python -u by python3, pidcat runs, but instead of colors, I get lines in the shape of:

b'\x1b[33m GestureDetector\x1b[0m \x1b[30;102m I \x1b[0m obtain mCurrentMotionEventRaw. action: 2 id: 629418386'

Any hints?

deckameron avatar Oct 05 '22 23:10 deckameron

If anyone still read this; I'm not sure how come this still remains open. But both of the issues are fixed by changing:

  • The first line, to: #!/usr/bin/env -S python3 -u
  • The last line, to: print(linebuf)

The broken color output apparently came from the attempt to convert line buffer to utf8.

annop-np avatar Oct 09 '23 15:10 annop-np