coc-pyright: reportMissingModuleSource using poetv + pyenv + poetry + mypy

I’m getting errors that I assume the plugin can’t find my virtualenv created by poetry.

Related shell configuration

# ~/.config/fish/config.fish
pyenv init - | source
which python3 | read -l answer
set -gx PYTHONPATH "$answer/site-packages" $PYTHONPATH
set -gx PYENV_ROOT $HOME/.pyenv
set -gx PIPENV_PYTHON "$PYENV_ROOT/shims/python"
# :CocInfo
## versions
vim version: VIM - Vi IMproved 8.2 8022450
node version: v12.14.1
coc.nvim version: 0.0.80-6e5a2aaeb5

vim src/file.py

image

:PoetvActivate :call CocAction('reloadExtension', 'coc-pyright') I guess this is needed?

image

Doesn’t seem to work? (Also note my statusline’s backend-dmp... which denotes poetv has activated the environment)

Packages:

Click to expand

:!pip list


Package                   Version
------------------------- ------------
aiofiles                  0.6.0
aiohttp                   3.7.3
async-timeout             3.0.1
asyncio                   3.4.3
attrs                     20.3.0
boto3                     1.16.24
botocore                  1.19.24
cachetools                4.1.1
certifi                   2020.11.8
chardet                   3.0.4
h11                       0.9.0
httpcore                  0.11.1
httptools                 0.1.1
httpx                     0.15.4
idna                      2.10
jmespath                  0.10.0
multidict                 5.0.0
mypy                      0.800
mypy-boto3-secretsmanager 1.17.9.0
mypy-extensions           0.4.3
pip                       19.2.3
python-dateutil           2.8.1
requests                  2.25.0
rfc3986                   1.4.0
s3transfer                0.3.3
sanic                     20.9.1
Sanic-Cors                0.10.0.post3
Sanic-Plugins-Framework   0.9.4.post1
sentry-sdk                0.19.4
setuptools                41.2.0
six                       1.15.0
sniffio                   1.2.0
typed-ast                 1.4.2
typing-extensions         3.7.4.3
ujson                     4.0.1
urllib3                   1.26.2
uvloop                    0.14.0
websockets                8.1
yarl                      1.6.3

the reverse order doesn’t work either: vim, :PoetvActivate, :e src/file.py.

However, poetry shell, vim src/file.py seems to work. What could be the issue here?

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 19 (10 by maintainers)

Commits related to this issue

Most upvoted comments

Is there any change in behavior if I start vim in the project root? Is the project root in this case the “backend” directory?

The information in this wiki may be helpful to ensure that project root (workspaceFolders) are detected properly. https://github.com/neoclide/coc.nvim/wiki/Using-workspaceFolders

For reference, this is how I set it up when the file type is python.

" ...snip
  au FileType python let b:coc_root_patterns = ['.git', '.env', 'venv', '.venv', 'setup.cfg', 'setup.py', 'pyrightconfig.json']
" ...snip

As a side note, by default, the directory where .git is located may be detected as the project root.

“coc.preferences.rootPatterns” settings, which default to [“.git”, “.hg”, “.projections.json”].

@yaegassy Boom! There it is.

We use the umbrella directory as an “umbrella”-directory for all of our projects at my work. So it has a .git folder.

Perhaps Coc detects that it’s the workspace folder while it’s incorrect.

I added your snippet into my vimrc and voila!

image

For future readers, make sure to set b:coc_root_patterns!

@Lilja coc-pyright v1.1.116 will log what’s python is using in :CocCommand workspace.showOutput - Pyright/coc-pyright-formatting/coc-pyright-linting.

I use the PoetvActivate to activate the virtualenv. It’s like Coc-Pyright doesn’t find it

coc-pyright doesn’t care PoetvActivate. The problem is when you enter vim, Pyright will try to detect Python and start, after you run PoetvActivate, Pyright doesn’t change anything. Maybe you can run :CocRestart after :PoetvActivate, (I don’t try this works or not)

referenced a .python-version

.python-version is created and used by pyenv, you shouldn’t create it if you use poetry to manage your venvs. coc-pyright will try to run poetry env list --full-path if there is a poetry.lock found.

What’s poetry env list --full-path output in your project?

pyrightconfig.json should be in valid json format, This is the minimum content.

{}

I do think poetry creates virtualenvs actually, I wouldn’t think some other tool creates it.

image

$ vim

  • :!which python
  • :PoetvActivate
  • :!which python

image