# Julia environments list

**URL:** <https://discourse.julialang.org/t/julia-environments-list/37774>\
**Category:** New to Julia\
**Created:** [April 17, 2020, 5:39pm UTC](https://discourse.julialang.org/t/julia-environments-list/37774 "2020-04-17T17:39:27Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![martincornejo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/martincornejo/32/13436_2.png) [@martincornejo](https://discourse.julialang.org/u/martincornejo)\
**Post date:** [April 17, 2020, 5:39pm UTC](https://discourse.julialang.org/t/julia-environments-list/37774/1 "2020-04-17T17:39:27Z")

</div>

Starting a new Julia environment is very ease

```julia
julia>] activate test

(test) pkg> 

```

Is there a way to visualize a list of all the environments?

---

<div class="post-metadata">

**Author:** ![leethargo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leethargo/32/6004_2.png) [@leethargo](https://discourse.julialang.org/u/leethargo)\
**Post date:** [April 17, 2020, 5:53pm UTC](https://discourse.julialang.org/t/julia-environments-list/37774/2 "2020-04-17T17:53:20Z")

</div>

I recently found a file `~/.julia/logs/manifest_usage.toml` which lists all recently used environments. I understand that this file is also used for `] gc`.

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [April 17, 2020, 6:11pm UTC](https://discourse.julialang.org/t/julia-environments-list/37774/3 "2020-04-17T18:11:01Z")

</div>

Being able to list them all would be a nice feature. Basically, just parse that file, sort the keys and print them. Would be a nice addition to Pkg.

---

<div class="post-metadata">

**Author:** ![aiqc](https://avatars.discourse-cdn.com/v4/letter/a/2acd7d/32.png) [@aiqc](https://discourse.julialang.org/u/aiqc)\
**Post date:** [August 9, 2021, 8:07pm UTC](https://discourse.julialang.org/t/julia-environments-list/37774/4 "2021-08-09T20:07:44Z")

</div>

I arrived here looking for a way to list environments =)

```julia
julia> using Pkg

julia> Pkg.envdir()
"/home/jrun/data/.julia/environments"

shell> cd "/home/jrun/data/.julia"
/mnt/data/.julia

shell> ls -la
total 36
drwxr-xr-x 8 jrun jrun 6144 Aug 9 19:52 .
drwxr-xr-x 6 jrun jrun 6144 Aug 9 18:29 ..
drwxr-xr-x 5 jrun jrun 6144 Aug 9 19:51 artifacts
drwxr-xr-x 3 jrun jrun 6144 Aug 9 19:48 compiled
drwxr-xr-x 2 jrun jrun 6144 Aug 9 19:51 logs
drwxr-xr-x 16 jrun jrun 6144 Aug 9 19:51 packages
lrwxrwxrwx 1 jrun jrun 15 Aug 9 18:29 registries -> /tmp/registries
drwxr-xr-x 3 jrun jrun 6144 Aug 9 19:52 scratchspaces
drwxr-xr-x 3 jrun jrun 6144 Aug 9 18:29 servers

```

Looks like there is no env by default for the binary

Opened an issue [https://github.com/JuliaLang/Pkg.jl/issues/2688](https://github.com/JuliaLang/Pkg.jl/issues/2688)

---

<div class="post-metadata">

**Author:** ![ellocco](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ellocco/32/31331_2.png) [@ellocco](https://discourse.julialang.org/u/ellocco)\
**Post date:** [November 23, 2022, 4:36pm UTC](https://discourse.julialang.org/t/julia-environments-list/37774/5 "2022-11-23T16:36:44Z")

</div>

my workaround:

```julia
function list_Pkg_environments()
    env_dir = joinpath(Pkg.envdir(), string("v", VERSION)[1:end-2])
    # env_dir = Pkg.envdir()
    dir_list = readdir(env_dir, join= false)
    dir_list_full = readdir(env_dir, join= true)
    env_list = []
    for i_ = eachindex(dir_list)
        if isdir(dir_list_full[i_]) 
            println(dir_list[i_])
            push!(env_list, dir_list[i_]) 
        end
    end
    return env_list
end

```

---

<div class="post-metadata">

**Author:** ![ellocco](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ellocco/32/31331_2.png) [@ellocco](https://discourse.julialang.org/u/ellocco)\
**Post date:** [November 23, 2022, 10:23pm UTC](https://discourse.julialang.org/t/julia-environments-list/37774/6 "2022-11-23T22:23:18Z")

</div>

here is my function to select and activate a user defined Julia-environment:

```julia
function select_Pkg_environment(_environment::String="")
    curr_dir = pwd()
    env_dir = joinpath(Pkg.envdir(), string("v", VERSION)[1:end-2])
    # env_dir = Pkg.envdir()
    dir_list = readdir(env_dir, join= false)
    dir_list_full = readdir(env_dir, join= true)
    env_list = []
    for i_ = eachindex(dir_list)
        if isdir(dir_list_full[i_]) 
            # println(dir_list[i_])
            push!(env_list, dir_list[i_]) 
        end
    end
    if isempty(_environment)
        if isempty(env_list)
            println("No additional environments found!")
        else
            println("---- Number of available environments: ", length(env_list), " ----")
            for i_ = eachindex(env_list)
                println(i_, ".) ",env_list[i_])
            end
            println("------------------------------------------------")
        end
    else
        if any(occursin.(_environment, string.(env_list)))
            if splitpath(Base.active_project())[end-1] != _environment
                cd(env_dir)
                Pkg.activate(_environment)
                cd(curr_dir)
                println("current dir: ", pwd())
            else
                @info(string("Environment \"", _environment, "\" is already loaded!"))
            end
        else
            @warn(string("Julia Pkg-environment: \"", _environment, "\" not found!"))
            @info("Call function without argument to list available environments.")
        end
    end
    return env_list
end

```

The strange thing is, that the command:

```julia
Pkg.activate("MyEnvironment")

```

opens a new user defined environment, if it is not yet known in a subfolder of `Pkg.envdir()`.  
And establishes the two environment files `Project.toml` & `Manifest.toml` in a sub-directory  
with the name of the user defined environment as soon as a package is added via: `Pkg.add("PackageName")`.  
But the next time I give the identical command: `Pkg.activate("MyEnvironment")`  
Pkg wants to establish a new environment definition directory at the current directory `pwd()`.  
Is this a bug or a feature?

---

<div class="post-metadata">

**Author:** ![ellocco](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ellocco/32/31331_2.png) [@ellocco](https://discourse.julialang.org/u/ellocco)\
**Post date:** [November 30, 2022, 10:30am UTC](https://discourse.julialang.org/t/julia-environments-list/37774/7 "2022-11-30T10:30:03Z")

</div>

And here my code to establish a new environment in a sub-folder of `Pkg.envdir()`:

```julia
function MyLib_Add_Pkg_env(_environment::String="")
    curr_dir = pwd()
    env_dir = joinpath(Pkg.envdir(), string("v", VERSION)[1:end-2])
    # env_dir = Pkg.envdir()
    dir_list = readdir(env_dir, join= false)
    dir_list_full = readdir(env_dir, join= true)
    env_list = []
    for i_ = eachindex(dir_list)
        if isdir(dir_list_full[i_]) 
            # println(dir_list[i_])
            push!(env_list, dir_list[i_]) 
        end
    end
    if isempty(_environment) || ~any(occursin.(_environment, string.(env_list)))
        cd(env_dir)
        Pkg.activate(_environment)
        Pkg.add("Revise")
        cd(curr_dir)
        println("current dir: ", pwd())
    end
    return env_list
end

```

---

<div class="post-metadata">

**Author:** ![ellocco](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ellocco/32/31331_2.png) [@ellocco](https://discourse.julialang.org/u/ellocco)\
**Post date:** [March 8, 2023, 7:29am UTC](https://discourse.julialang.org/t/julia-environments-list/37774/8 "2023-03-08T07:29:31Z")

</div>

I have updated / debugged my two functions:

```julia
function MyLib_add_primary_env(_environment::String="")
    Pkg.activate() # make sure we are in the primary default environment        
    env_dir, _ = splitdir(Base.active_project())
    # env_dir = Pkg.envdir()
    dir_list = readdir(env_dir, join= false)
    dir_list_full = readdir(env_dir, join= true)
    env_list = []
    for i_ = eachindex(dir_list)
        if isdir(dir_list_full[i_]) 
            # println(dir_list[i_])
            push!(env_list, dir_list[i_]) 
        end
    end
    if isempty(_environment) || ~any(occursin.(_environment, string.(env_list)))
        prim_env_dir = joinpath(env_dir, _environment)
        Pkg.activate(prim_env_dir)
        Pkg.instantiate()
    end
    return env_list
end

```

and:

```julia
function MyLib_select_primary_env(_environment::String="")
    b_dbg = false
    prim_env_dir = []
    if VERSION < VersionNumber(1, 6, 7)
        error("Julia too old! Please upgrade to v > v1.6.7!")
    else
        Pkg.activate() # make sure we are in the primary default environment        
        env_dir, _ = splitdir(Base.active_project())
    end
    # env_dir = Pkg.envdir()
    dir_list = readdir(env_dir, join= false)
    dir_list_full = readdir(env_dir, join= true)
    env_list = []
    for i_ = eachindex(dir_list)
        if isdir(dir_list_full[i_]) 
            # println(dir_list[i_])
            push!(env_list, dir_list[i_]) 
        end
    end
    if isempty(_environment)
        Pkg.activate()
        if isempty(env_list)
            println("No additional environments found!")
        else
            if b_dbg
                println("---- Number of available environments: ", length(env_list), " ----")
                for i_ = eachindex(env_list)
                    println(i_, ".) ",env_list[i_])
                end
                println("------------------------------------------------")
            end
        end
    else
        prim_env_dir = joinpath(env_dir, _environment)
        if any(occursin.(_environment, string.(env_list)))
            if splitpath(Base.active_project())[end-1] != _environment
                Pkg.activate(prim_env_dir)
            else
                @info(string("Environment \"", _environment, "\" is already loaded!"))
            end
        else
            @warn(string("Julia Pkg-environment: \"", _environment, "\" not found!"))
            @info("Call function without argument to list available environments.")
        end
    end
    return env_list
end

```
