linux-cultist / venv-selector.nvim

Allows selection of python virtual environment from within neovim
MIT License
379 stars 40 forks source link

Some conda paths being incorrectly searched #57

Closed desilinguist closed 10 months ago

desilinguist commented 10 months ago

Thanks for the amazing plugin! As a conda user, I was extremely excited to find this and set it up a couple of weeks ago and it worked great. I had set it up to only find my anaconda environments since I don't use any other virtual environment managers. It was really fast!

However, with the latest update, I am now finding that it takes a few seconds to update in every project directory. I have tried the various config options but nothing seems to fix it. I am 90% sure that this is a problem with me not finding the correct set of config options and so I am writing to ask for help here.

I install the plugin with lazy.nvim like so:

    -- allow selecting conda environments from within neovim
    {
        "linux-cultist/venv-selector.nvim",
        config = true,
        opts = {
            search = false,
                       search_workspace = false,
                       search_venv_managers = false,
        },
    },

and set it up like so:

require("venv-selector").setup({
    anaconda_base_path = "/Users/nmadnani/anaconda",
    anaconda_envs_path = "/Users/nmadnani/anaconda/envs",
})

Here's a video showing how long the telescope view takes to populate and that it's still looking in places where it shouldn't be. Any suggestions will be greatly appreciated.

https://github.com/linux-cultist/venv-selector.nvim/assets/161680/bfba7de5-49dd-49e2-81fe-2491180f5056

linux-cultist commented 10 months ago

Hi and thank you for reporting this!

I just pushed the latest changes to how anaconda works and it looks like you are using the correct options, but it should absolutely not be slow.

You even have the search setting set to false so it should be instant. Can you add the enable_debug_output option to the setup function, like:

require("venv-selector").setup({
    anaconda_base_path = "/Users/nmadnani/anaconda",
    anaconda_envs_path = "/Users/nmadnani/anaconda/envs",
    enable_debug_output = true
})

And then VenvSelect should give you lots of debug output saved in :messages inside neovim. Type :messages and share the output and we will probably both be wiser whats going on. :)

desilinguist commented 10 months ago

Thank you for the quick response! Below is what :messages shows me after I enable debug output.

``` VenvSelect: { anaconda_base_path = "/Users/nmadnani/anaconda", anaconda_envs_path = "/Users/nmadnani/anaconda/envs", auto_refresh = false, cache_dir = "/Users/nmadnani/.cache/venv-selector/", cache_file = "/Users/nmadnani/.cache/venv-selector/venvs.json", changed_venv_hooks = { , , }, dap_enabled = false, enable_debug_output = true, hatch_path = "~/Library/Application/Support/hatch/env/virtual", name = "venv", notify_user_on_activate = true, parents = 2, pipenv_path = "~/.local/share/virtualenvs", poetry_path = "~/Library/Caches/pypoetry/virtualenvs", pyenv_path = "~/.pyenv/versions", search = true, search_venv_managers = true, search_workspace = true, venvwrapper_path = "~/.virtualenvs" } VenvSelect: Setting fd_binary_name to 'fd' since it was found on system. /Users/nmadnani/work/skll "skll/learner/__init__.py" 1965L, 81070B VenvSelect: Telescope path: /Users/nmadnani/work/skll VenvSelect: Looking for parent venvs in '/Users/nmadnani' using the following parameters: VenvSelect: { "--absolute-path", "--color", "never", "-E", "/Users/nmadnani/anaconda", "-E", "/Users/nmadnani/anaconda/envs", "-E", "/proc", "-HItd", "^venv$", "/Users/nmadnani" } VenvSelect: Found venv in parent search: /Users/nmadnani/.vscode/extensions/ms-python.python-2022.20.2/pythonFiles/lib/jedilsp/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/.vscode/extensions/ms-python.vscode-pylance-2023.3.20/dist/typeshed-fallback/stdlib/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/.vscode/extensions/ms-python.python-2023.4.1/pythonFiles/lib/jedilsp/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/Library/Caches/com.apple.python/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/Library/Caches/com.apple.python/Users/nmadnani/.local/share/nvim/mason/packages/ruff/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/.local/share/nvim/mason/packages/yamllint/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/.local/share/nvim/mason/packages/beautysh/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/.local/share/nvim/mason/packages/codespell/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/.local/share/nvim/mason/packages/pyright/node_modules/pyright/dist/typeshed-fallback/stdlib/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/.local/share/nvim/mason/packages/proselint/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/.local/share/nvim/mason/packages/ruff/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/.local/share/nvim/mason/packages/esbonio/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/.local/share/nvim/mason/packages/rstcheck/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/pkgs/python-3.11.4-h47c9636_0_cpython/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/pkgs/jedi-0.19.0-pyhd8ed1ab_0/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/lib/python3.10/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/llama/lib/python3.10/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/jupyter/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/jupyter/lib/python3.11/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/vocabdev/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/vocabdev/lib/python3.11/site-packages/mypy/typeshed/stdlib/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/vocabdev/lib/python3.11/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/rfsapi_dev/lib/python3.8/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/wwwdocsdev/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/timedev/lib/python3.10/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/factanal/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/timedev/lib/python3.10/site-packages/mypy/typeshed/stdlib/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/opsmodelsdev/lib/python3.8/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/opsmodelsdev/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/rsmextradev/lib/python3.8/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/rsmextradev/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/coursera/lib/python3.9/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/confbook/lib/python3.9/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/gcbook/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/linters/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/adventdev/lib/python3.10/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/adventdev/lib/python3.10/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/shap42/lib/python3.8/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/sklldev/lib/python3.8/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/sklldev/lib/python3.8/site-packages/mypy/typeshed/stdlib/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/sklldev/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/vocabprod/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/vocabprod/lib/python3.11/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/ttok/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/sklltest/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/acgevaldev/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/speakerbox/lib/python3.10/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/pydubtest/lib/python3.10/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/pydubtest/lib/python3.10/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/vimgolf/lib/python3.8/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/analysis/lib/python3.10/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/hanukkahdev/lib/python3.10/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/analysis/lib/python3.10/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/shap41/lib/python3.8/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/rfs_doc/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/langchain/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/langchain/lib/python3.11/site-packages/circus/tests/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/langchain/lib/python3.11/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/youtube/lib/python3.10/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/shellgpt/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/rsmdev/lib/python3.11/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/rsmdev/lib/python3.11/site-packages/jedi/third_party/typeshed/stdlib/3/venv/ VenvSelect: Found venv in parent search: /Users/nmadnani/anaconda/envs/asrapi_dev/lib/python3.8/venv/ VenvSelect: Found workspace folder: /Users/nmadnani/work/skll VenvSelect: Running search for workspace venvs with: fd -HItd --absolute-path --color never '^venv$' /Users/nmadnani/work/skll VenvSelect: Running search for venv manager venvs with: fd . -HItd -tl --absolute-path --max-depth 1 --color never /Users/nmadnani/anaconda/envs VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/acgevaldev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/adventdev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/analysis/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/asrapi_dev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/confbook/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/coursera/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/factanal/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/gcbook/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/hanukkahdev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/jupyter/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/langchain/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/linters/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/llama/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/opsmodelsdev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/pydubtest/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/rfs_doc/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/rfsapi_dev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/rsmdev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/rsmextradev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/shap41/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/shap42/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/shellgpt/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/sklldev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/sklltest/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/speakerbox/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/timedev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/ttok/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/vimgolf/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/vocabdev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/vocabprod/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/wwwdocsdev/ VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/youtube/ Adding: /Users/nmadnani/anaconda/ VenvSelect: There are 96 results to show: ```

One thing I immediately see is that search is still set to true for some reason! This is strange because here's the block in lazy.nvim:

    -- allow selecting conda environments from within neovim
    {
        "linux-cultist/venv-selector.nvim",
        config = function()
            require("venv-selector").setup({
                anaconda_base_path = "/Users/nmadnani/anaconda",
                anaconda_envs_path = "/Users/nmadnani/anaconda/envs",
                                enable_debug_output = true,
            })
        end,
        opts = {
            search = false,
            search_workspace = false,
            search_venv_managers = false,
        },
    },
linux-cultist commented 10 months ago

Yup that must be the bug, and it explains why its so slow - its searching your entire home directory.

I also see thats its searching the folders under $HOME/anaconda when it should really be searching only $HOME/anaconda/envs.

I will have a look tonight or tomorrow why its ignoring the search = false option all of a sudden. That was really surprising... and then fix the other bug with conda search path also. Thank you!

linux-cultist commented 10 months ago

Ah one thing, I see that you have put both config and opts in two places.

Try this config in lazy.nvim. It will call VenvSelect setup() function automatically with your specified options:

    {
        "linux-cultist/venv-selector.nvim",
        dependencies = { "neovim/nvim-lspconfig", "nvim-telescope/telescope.nvim" },
        opts = {
            enable_debug_output = true,
            search = false,
            anaconda_base_path = "/Users/nmadnani/anaconda",
        anaconda_envs_path = "/Users/nmadnani/anaconda/envs",
        },
    },

May not fix the bug but makes for cleaner code.

desilinguist commented 10 months ago

That did it! Thank you so much!! 🙏🏽

linux-cultist commented 10 months ago

Very good! But you still should have that bug with VenvSelect searching more than $HOME/anaconda/envs - will fix that later. But at least its fast again for you. :)

linux-cultist commented 10 months ago

Reopening to fix issue with Conda paths asap.

desilinguist commented 10 months ago

Here's what it shows now:

VenvSelect: Setting fd_binary_name to 'fd' since it was found on system.                                                                                                      
/Users/nmadnani/work/rsmtool                                                                                                                                                  
"rsmtool/analyzer.py" 2094L, 81842B                                                                                                                                           
VenvSelect: Telescope path: /Users/nmadnani/work/rsmtool                                                                                                                      
VenvSelect: Found workspace folder: /Users/nmadnani/work/rsmtool                                                                                                              
VenvSelect: Running search for workspace venvs with: fd -HItd --absolute-path --color never '^venv$' /Users/nmadnani/work/rsmtool                                             
VenvSelect: Running search for venv manager venvs with: fd . -HItd -tl --absolute-path --max-depth 1 --color never /Users/nmadnani/anaconda/envs                              
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/acgevaldev/                                                                                       
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/adventdev/                                                                                        
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/analysis/                                                                                         
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/asrapi_dev/                                                                                       
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/confbook/                                                                                         
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/coursera/                                                                                         
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/factanal/                                                                                         
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/gcbook/                                                                                           
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/hanukkahdev/                                                                                      
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/jupyter/                                                                                          
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/langchain/                                                                                        
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/linters/                                                                                          
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/llama/                                                                                            
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/opsmodelsdev/                                                                                     
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/pydubtest/                                                                                        
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/rfs_doc/                                                                                          
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/rfsapi_dev/                                                                                       
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/rsmdev/                                                                                           
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/rsmextradev/                                                                                      
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/shap41/                                                                                           
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/shap42/                                                                                           
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/shellgpt/                                                                                         
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/sklldev/                                                                                          
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/sklltest/                                                                                         
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/speakerbox/                                                                                       
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/timedev/                                                                                          
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/ttok/                                                                                             
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/vimgolf/                                                                                          
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/vocabdev/                                                                                         
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/vocabprod/                                                                                        
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/wwwdocsdev/                                                                                       
VenvSelect: Found venv in VenvManager search: /Users/nmadnani/anaconda/envs/youtube/                                                                                          
Adding: /Users/nmadnani/anaconda/                                                                                                                                             
VenvSelect: There are 33 results to show:
linux-cultist commented 10 months ago

Hmm that actually looks correct!

I guess it was the previous config that confused it maybe. It seems to only lists your envs, and also the base anaconda env, which is correct behavior, so you can switch to that one also if you want. :)

But then I guess we can close this actually... right?

desilinguist commented 10 months ago

Yes, I think we are good now. Thanks again!