@@ -1077,31 +1077,57 @@ export async function deleteCondaEnvironment(environment: PythonEnvironment, log
10771077 ) ;
10781078}
10791079
1080+ /**
1081+ * JSON structure returned by `conda list --json`
1082+ */
1083+ interface CondaPackageJson {
1084+ name : string ;
1085+ version : string ;
1086+ build_string ?: string ;
1087+ channel ?: string ;
1088+ }
1089+
1090+ /**
1091+ * Refreshes the list of packages installed in a conda environment.
1092+ * Uses `conda list -p <prefix> --json` for reliable parsing.
1093+ *
1094+ * @param environment The Python environment to get packages for
1095+ * @param api The Python environment API
1096+ * @param manager The package manager instance
1097+ * @returns Promise resolving to an array of Package objects
1098+ */
10801099export async function refreshPackages (
10811100 environment : PythonEnvironment ,
10821101 api : PythonEnvironmentApi ,
10831102 manager : PackageManager ,
10841103) : Promise < Package [ ] > {
1085- let args = [ 'list' , '-p' , environment . environmentPath . fsPath ] ;
1104+ const args = [ 'list' , '-p' , environment . environmentPath . fsPath , '--json' ] ;
10861105 const data = await runCondaExecutable ( args ) ;
1087- const content = data . split ( / \r ? \n / ) . filter ( ( l ) => ! l . startsWith ( '#' ) ) ;
1106+
1107+ let condaPackages : CondaPackageJson [ ] ;
1108+ try {
1109+ condaPackages = JSON . parse ( data ) as CondaPackageJson [ ] ;
1110+ } catch ( e ) {
1111+ traceError ( `Failed to parse conda list JSON output: ${ data } ` , e ) ;
1112+ return [ ] ;
1113+ }
1114+
10881115 const packages : Package [ ] = [ ] ;
1089- content . forEach ( ( l ) => {
1090- const parts = l . split ( ' ' ) . filter ( ( p ) => p . length > 0 ) ;
1091- if ( parts . length >= 3 ) {
1116+ for ( const condaPkg of condaPackages ) {
1117+ if ( condaPkg . name && condaPkg . version ) {
10921118 const pkg = api . createPackageItem (
10931119 {
1094- name : parts [ 0 ] ,
1095- displayName : parts [ 0 ] ,
1096- version : parts [ 1 ] ,
1097- description : parts [ 1 ] ,
1120+ name : condaPkg . name ,
1121+ displayName : condaPkg . name ,
1122+ version : condaPkg . version ,
1123+ description : condaPkg . version ,
10981124 } ,
10991125 environment ,
11001126 manager ,
11011127 ) ;
11021128 packages . push ( pkg ) ;
11031129 }
1104- } ) ;
1130+ }
11051131 return packages ;
11061132}
11071133
0 commit comments