ofirgall/tmux-window-name

libtmux not found on Mac even though installed

Closed this issue · 17 comments

Hi,

I have setup tmux-window-name using the tpm but when I source .tmux.conf, I see an error at the bottom of the window saying:

ERROR: tmux-window-name - Python dependency libtmux not found (Check the README)

I am running tmux on iTerm2 and on a Mac. Any idea what the issue might be?

can you share the output of python3 -m pip list?

❯ python3 -m pip list
Package           Version
----------------- -------
awscli-local      0.20
boto3             1.24.20
botocore          1.27.20
jmespath          1.0.1
libtmux           0.11.0
localstack-client 1.35
pip               22.1.2
python-dateutil   2.8.2
s3transfer        0.6.0
setuptools        58.1.0
six               1.16.0
urllib3           1.26.9

can you run this bash code and share the output

pip_list=$(python3 -m pip list 2> /dev/null)
echo "pip_list"
echo "$pip_list"
if ! echo "$pip_list" | grep libtmux -q; then
    echo "error"
    exit 0
fi
echo "ok"
❯ ./debug.sh
pip_list
Package           Version
----------------- -------
awscli-local      0.20
boto3             1.24.20
botocore          1.27.20
jmespath          1.0.1
libtmux           0.11.0
localstack-client 1.35
pip               22.1.2
python-dateutil   2.8.2
setuptools        58.1.0
six               1.16.0
urllib3           1.26.9
ok

Just a heads up, I uninstalled s3transfer just now so it would be a package that is missing from my last message.

It's very weird, the output is ok, its the same code from tmux_window_name.tmux which tpm runs, you can manually edit your tmux_window_name.tmux to add debug prints, add echo "$pip_list" and reload your plugins <prefix> + r

It is super weird indeed. I added the echo "$pip_list" before the if-block but it does not get printed on the screen, the error is displayed though. How do I see the output?

I've tried <prefix> + r and also running tmux source-file ~/.tmux.conf with the same results.

it's usually "stops" the current screen on the tmux session and shows the output, make sure you edited `"~/.tmux/plugins/tmux-window-name/tmux_window_name.tmux", if it still doesn't show output you can send the output to file.

echo "$pip_list" > /tmp/tmux_out

I confirmed that the "~/.tmux/plugins/tmux-window-name/tmux_window_name.tmux" was indeed updated but the output is not being printed. Updated to send output to file:

Package    Version
---------- -------
pip        22.0.4
setuptools 60.10.0
six        1.16.0
wheel      0.37.1

I am on zsh could that be a problem?

zsh isn't a problem.

It seems that your tpm runs the bash/python with different user/python version.

Please add:

echo $USER
which python3
python3 -V
python3 -m site
python3 -m site --user-site

I think I found the issue. tmux_window_name uses a different version of python: /usr/local/bin/python.

In my shell, I use the python provided with pyenv. Let me try initializing pyenv in the "~/.tmux/plugins/tmux-window-name/tmux_window_name.tmux".

Added the following:

if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init --path)";
fi

and the pip_list is now as expected. Will try to see if the names are showing up as expected.

No errors anymore but switching between screens in a session gives the following error:

'~/.tmux/plugins/tmux-window-name/scripts/rename_session_windows.py' returned 1

I strongly suggest to installed libtmux in the user python, I designed the plugin to use the user python env.

You can manually run ~/.tmux/plugins/tmux-window-name/scripts/rename_session_windows.py' from your terminal to see the traceback.

Thanks for your suggestion. I installed libtmux to the default python3, removed the pyenv initialization and now it works as expected.

Appreciate your prompt responses and maintaining this super useful tool. Kudos!

Thanks! Have fun with the tool :)

I added note in the README to use the user plugin instead of virtualenv

I strongly suggest to installed libtmux in the user python, I designed the plugin to use the user python env.

It seems that in 'tmux_window_name.tmux', pip_list=$(python3 -m pip list 2> /dev/null) doesn't retreive user packages but rather root's packages. I added tmux display "$(pip -V)" in the script, and it prints message: pip 24.2 from /usr/local/lib/python3.12/site-packages/pip (python 3.12), which is not in user mode.

EDIT:
And now I'm encountering the same problem (libtmux not found).

The problem has now disappeared.

For those who encounter the same problem in the future, we need to use the system python3, not Homebrew's:

$ which python3
/opt/homebrew/opt/python@3.10/libexec/bin/python3

If your environment returns something like this, you should do the following instead:

$ /usr/bin/python3 -m pip install --user libtmux