1

The issue

I recently switched to nvim + tmux and I have a fully working setup with various plugins. I use Poetry to manage my python virtual envs and it's a mandatory tool. I highlight the fact that my python setup in neovim is fully working. LSP is responding well and I have all the benefits of this tool.

  1. When I don't source my python virtual env before launching nvim, it'a a fully working setup
  2. When I source the virtual env created with poetry, I get multiple bugs in the user interface of nvim. It's related to tmux because these bugs appears when I create panes.

I'd really need to be able to use poetry since I have a lot of project using it. But I still don't want to return on Pycharm, but I have no clue on how to tackle this issue since it seems to be very specific. Any idea on what could be leading to this ?

My setup

I have a very simple setup of python in my workstation :

  • Python 3.6 to 3.10 installed with the official installer for macOS
  • I don't use Pyenv
  • I never install anything with pip
  • I have several Python executables installed with pipx (such as Flake8, iPython and others)
  • one of these pipx envs is used for setting various packages related to LSP and it's declared as global in my nvim settings
# the declaration of the env in my nvim settings
vim.g.python3_host_prog = "$HOME/.local/pipx/venvs/python-lsp-server/bin/python"

details of this env managed by pipx

package python-lsp-server 1.4.1, installed using Python 3.10.4 - pylsp Injected Packages: - flake8 4.0.1 - greenlet 1.1.2 - jedi-language-server 0.36.0 - msgpack 1.0.4 - pylint 2.14.0 - pyls-isort 0.2.2 - pylsp-mypy 0.5.8 - pynvim 0.4.3 - vim-vint 0.3.21

  • I use poetry to create one virtual env for each project

The tests

  • I used this setup outside of a tmux session and its working well but the whole point of my config is to work within tmux.
  • I test it against a barebone nvim setup (nvim -u none) to check it there is something wrong with my plugins and the issues are still there.
  • I tried with a virtual env created with the native python tools (python3 -m venv ./.venv-name) : there is no issue.
  • So I test a poetry setup where the venv is installed in the current directory but it still doesn't work.

Screenshots and nvim diagnostics

The :checkhealth report

## Python 3 provider (optional)
  - INFO: Using: g:python3_host_prog = "$HOME/.local/pipx/venvs/python-lsp-server/bin/python"
  - INFO: Executable: /Users/azp/.local/pipx/venvs/python-lsp-server/bin/python
  - INFO: Python version: 3.10.5
  - INFO: pynvim version: 0.4.3
  - OK: Latest pynvim is installed.

Python virtualenv

  • WARNING: $VIRTUAL_ENV is set to: /Users/azp/dev/temp/.venv And its /bin directory contains: python, python3, python3.10 But $PATH in subshells yields this python3 executable: /Library/Frameworks/Python.framework/Versions/3.10/bin/python3 And $PATH in subshells yields this python3.10 executable: /Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10 So invoking Python may lead to unexpected results.
    • ADVICE:
      • $PATH ambiguities in subshells typically are caused by your shell config overriding the $PATH previously set by the virtualenv. Either prevent them from doing so, or use this workaround: https://vi.stackexchange.com/a/34996

Interface when poetry venv is NOT sourced

The panes are created in a dummy tmux session, the nvim interface is resized accordingly: Creation of several panes

Closing the panes and Nvim interface is taking all the place available without any issue: After deleting the panes

Issue when poetry venv is sourced

Creation of the panes and already there are an issue with the canvas and the status line :

Buggy interface

After closing the panes the nvin presents the following issues :

Issues after closing the panes

AxZxP
  • 21
  • 4

1 Answers1

1

This is all because of the tools used to manage python virtual env spawn a subshell and it is not very compatible with a good integration with vim and tmux.

The only solution to use the good python interpreter within a vim session and not spawn a subshell is to deactivate the venv and to launch vim with poetry run nvim or pipenv run nvim.

AxZxP
  • 21
  • 4