Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid spawning Conda to get list of environments and conda version #23413

Closed
DonJayamanne opened this issue May 13, 2024 · 3 comments
Closed
Assignees
Labels
debt Covers everything internal: CI, testing, refactoring of the codebase, etc.

Comments

@DonJayamanne
Copy link

DonJayamanne commented May 13, 2024

Based on the following source code for Conda
list_all_known_prefixes

We can get all the environments from

  • the environments txt file
  • envs folder

The conda version can be extracted from the conda-meta folder for conda-<version>*.json file

@DonJayamanne DonJayamanne added the feature-request Request for new features or functionality label May 13, 2024
@DonJayamanne DonJayamanne self-assigned this May 13, 2024
@DonJayamanne DonJayamanne added debt Covers everything internal: CI, testing, refactoring of the codebase, etc. and removed feature-request Request for new features or functionality labels May 13, 2024
@github-actions github-actions bot added the triage-needed Needs assignment to the proper sub-team label May 13, 2024
@DonJayamanne
Copy link
Author

@karthiknadig
I'll implement this in the new Native_locator.

@DonJayamanne DonJayamanne self-assigned this May 13, 2024
@DonJayamanne DonJayamanne removed the triage-needed Needs assignment to the proper sub-team label May 13, 2024
DonJayamanne added a commit that referenced this issue May 13, 2024
**Fixes**
* #23413
* & the fact that we always use the same conda exe to manage all conda
envs, even if multiple are installed.

* Step 1:
* Look for conda install folders in known locations such as `/<user
home>/miniconda3`, `<user profile>/Anaconda3`
* Step 2:
* For each install location identified, inspect that folder and extract
the
        * Conda executable
        * All environments belonging to that conda installation
* Step 3:
    * Old approach, 
* 1. find any conda in sys path or other locations and find conda
installation via that mechanism
* 2. Get all envs from environments.txt file (any remaining conda envs
not discovered in 1 & 2 will be discoverred here and use some the global
conda exe)
Once we have step 1 and 2, I do not expect anything new to show up in
step 3,
Even if users install conda into some custom locations (the solution
would be to run step 1 with the custom location provided by user in
settings.json file)

**How to find environments?**
* Look in the `envs` folder of the conda installation
* Look at the entries in the `environments.txt` file
* Look at the `env_dirs` in the `.condarc` file

With these two, we should be able to eliminate the need to ever spawn
conda to get the env directories.


**How do we know whether a conda environment belongs to a specific conda
installation**
* If it is in the `envs` sub directory of the conda installation
* Else, have a look at `<env folder>/conda-meta/history` file to look at
the conda installation that was used to create this environment
@karthiknadig
Copy link
Member

Do we want to adopt this into TS discovery? The plan is to get rid of the entire TS discover and resolve infrastructure eventually.

@DonJayamanne
Copy link
Author

Fixed in the native locator.

anthonykim1 pushed a commit to anthonykim1/vscode-python that referenced this issue May 16, 2024
**Fixes**
* microsoft#23413
* & the fact that we always use the same conda exe to manage all conda
envs, even if multiple are installed.

* Step 1:
* Look for conda install folders in known locations such as `/<user
home>/miniconda3`, `<user profile>/Anaconda3`
* Step 2:
* For each install location identified, inspect that folder and extract
the
        * Conda executable
        * All environments belonging to that conda installation
* Step 3:
    * Old approach, 
* 1. find any conda in sys path or other locations and find conda
installation via that mechanism
* 2. Get all envs from environments.txt file (any remaining conda envs
not discovered in 1 & 2 will be discoverred here and use some the global
conda exe)
Once we have step 1 and 2, I do not expect anything new to show up in
step 3,
Even if users install conda into some custom locations (the solution
would be to run step 1 with the custom location provided by user in
settings.json file)

**How to find environments?**
* Look in the `envs` folder of the conda installation
* Look at the entries in the `environments.txt` file
* Look at the `env_dirs` in the `.condarc` file

With these two, we should be able to eliminate the need to ever spawn
conda to get the env directories.


**How do we know whether a conda environment belongs to a specific conda
installation**
* If it is in the `envs` sub directory of the conda installation
* Else, have a look at `<env folder>/conda-meta/history` file to look at
the conda installation that was used to create this environment
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jun 16, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
debt Covers everything internal: CI, testing, refactoring of the codebase, etc.
Projects
None yet
Development

No branches or pull requests

2 participants