# Artifacts folder not empty - error when installing Plots.jl

**URL:** https://discourse.julialang.org/t/artifacts-folder-not-empty-error-when-installing-plots-jl/117289
**Category:** General Usage
**Tags:** packages, installation, plots, artifacts
**Created:** [July 21, 2024, 8:37am UTC](https://discourse.julialang.org/t/artifacts-folder-not-empty-error-when-installing-plots-jl/117289 "2024-07-21T08:37:58Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![c\_sell](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/c_sell/32/38854_2.png) [@c\_sell](https://discourse.julialang.org/u/c_sell)
#### Post date: [July 21, 2024, 8:37am UTC](https://discourse.julialang.org/t/artifacts-folder-not-empty-error-when-installing-plots-jl/117289/1 "2024-07-21T08:37:58Z")

</div>

Hi,  
I’m getting the same error for different packages in Julia. For example, when I try to install Plots, I get the error.

```julia
IOError: rm("C:\\Users\\___\\.julia\\artifacts\\jl_6eeUjb\\bin"): directory not empty (ENOTEMPTY)
Stacktrace:
  [1] uv_error
    @ .\libuv.jl:106 [inlined]
  [2] rm(path::String; force::Bool, recursive::Bool)
    @ Base.Filesystem .\file.jl:307
  [3] rm(path::String; force::Bool, recursive::Bool)
    @ Base.Filesystem .\file.jl:294
  [4] rm
    @ .\file.jl:273 [inlined]
  [5] download_artifact(tree_hash::Base.SHA1, tarball_url::String, tarball_hash::Nothing; verbose::Bool, quiet_download::Bool, io::IOContext{IO})

```

I’m also getting this error when I try to install GeometryBasics for a different artifact. I’ve already tried reinstalling Julia and removing the artifacts folder, but the error still occurred with Julia versions 1.10.4 and 1.11 rc. I am working on windows 11.  
I’d really appreciate any help.

---

<div class="post-metadata">

### Author: ![nhz2](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nhz2/32/44428_2.png) [@nhz2](https://discourse.julialang.org/u/nhz2)
#### Post date: [July 21, 2024, 3:08pm UTC](https://discourse.julialang.org/t/artifacts-folder-not-empty-error-when-installing-plots-jl/117289/2 "2024-07-21T15:08:38Z")

</div>

It seems like your anti-virus is interfering with Julia saving files.

> <https://github.com/JuliaLang/Pkg.jl/issues/3822>
>
> When running \`Pkg.add("CairoMakie")\` in an empty project I'm getting this, \`Erro…r: "C:\\\\Users\\\\meyer\\\\.julia\\\\artifacts\\\\a8244d6d23cbb895fcd39dd3eddb859a0c05d1c6" could not be made\`, which I seems to occur as the atomic rename fails after https://github.com/JuliaLang/Pkg.jl/pull/3768. 
> 
> However, before getting there, I hit https://github.com/JuliaLang/julia/issues/34700, but that could be due to a failure related to above, but the \`rm\` is in a final block...
> 
> To "fix" the problem, I first hacked \`Base.rm\`
> \`\`\`julia
> function Base.rm(path::String; force::Bool=false, recursive::Bool=false)
> if !(force && recursive)
> return invoke(Base.rm, Tuple{AbstractString}, path; force, recursive)
> else
> max\_attempts = 3
> attempts = 0
> while attempts \< max\_attempts
> attempts += 1
> try
> invoke(Base.rm, Tuple{AbstractString}, path; recursive=true, force=true)
> catch err
> if isa(err, Base.IOError) && attempts \< max\_attempts
> println("Trying again for \\"", path, "\\"")
> attempts == (max\_attempts - 1) && sleep(1.0)
> continue
> else
> println("Failed for \\"", path, "\\"")
> rethrow(err)
> end
> end
> end
> end
> end
> \`\`\`
> (but this could just as well be done in \`create\_artifact\`) 
> 
> And modified \`\_mv\_temp\_artifact\_dir\` (which I couldn't hack since the dispatch is concrete...)
> \`\`\`julia
> function \_mv\_temp\_artifact\_dir(temp\_dir::String, new\_path::String)::Nothing
> if !isdir(new\_path)
> # This next step is like
> # \`mv(temp\_dir, new\_path)\`.
> # However, \`mv\` defaults to \`cp\` if \`rename\` returns an error.
> # \`cp\` is not atomic, so avoid the potential of calling it.
> err = ccall(:jl\_fs\_rename, Int32, (Cstring, Cstring), temp\_dir, new\_path)
> # Ignore rename error, but ensure \`new\_path\` exists.
> if !isdir(new\_path)
> println("Just do cp 💀")
> mv(temp\_dir, new\_path)
> end
> if !isdir(new\_path)
> error("$(repr(new\_path)) could not be made")
> end
> chmod(new\_path, filemode(dirname(new\_path)))
> set\_readonly(new\_path)
> end
> nothing
> end
> \`\`\`
> 
> \`Just do cp 💀\` is printed twice, along with a couple of \`Trying again for ...\`. 
> In fact, it seems like the \`x264\_jll\` and \`Pixman\_jll\` are the ones that needs retries, not sure if by chance or anything special about these. 
> 
> Strangely, trying many times, it seemed to work, but fails again if I empty the artifacts folder...
> 
> \<details\> \<summary\> Versioninfo \</summary\>
> 
> \`\`\`julia
> Julia Version 1.10.2
> Commit bd47eca2c8 (2024-03-01 10:14 UTC)
> Build Info:
> Official https://julialang.org/ release
> Platform Info:
> OS: Windows (x86\_64-w64-mingw32)
> CPU: 8 × 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
> WORD\_SIZE: 64
> LIBM: libopenlibm
> LLVM: libLLVM-15.0.7 (ORCJIT, tigerlake)
> Threads: 1 default, 0 interactive, 1 GC (on 8 virtual cores)
> Environment:
> JULIA\_EDITOR = code
> JULIA\_NUM\_THREADS =
> \`\`\`
> \</details\>

I made a PR to improve the error message here:

> <https://github.com/JuliaLang/Pkg.jl/pull/3827>
>
> This PR should improve error messages if an anti-virus prevents the temporary di…rectory the artifact is unpacked into from being renamed or deleted. Ref #3822 
> 
> The issue is that an error that occurs in a \`finally\` after a \`try\` and \`catch\` hides any error that occurred in the \`try\`. 
> 
> The following is the message I get when I simulate rm and rename failing on Linux with this PR:
> 
> \`\`\`julia
> (jl\_OE62qJ) pkg\> add iso\_codes\_jll
> Resolving package versions...
> ┌ Error: your anti-virus may be interfering with artifact installation
> └ @ Pkg.Artifacts ~/github/Pkg.jl/src/Artifacts.jl:80
> ┌ Warning: Failed to clean up temporary directory "/home/nathan/.julia/artifacts/jl\_iBFnfP"
> │ exception = fake rm error
> └ @ Pkg.Artifacts ~/github/Pkg.jl/src/Artifacts.jl:384
> ┌ Error: your anti-virus may be interfering with artifact installation
> └ @ Pkg.Artifacts ~/github/Pkg.jl/src/Artifacts.jl:80
> ┌ Warning: Failed to clean up temporary directory "/home/nathan/.julia/artifacts/jl\_97yMLY"
> │ exception = fake rm error
> └ @ Pkg.Artifacts ~/github/Pkg.jl/src/Artifacts.jl:384
> ERROR: Unable to automatically download/install artifact 'iso\_codes' from sources listed in '/home/nathan/.julia/packages/iso\_codes\_jll/QEOzB/Artifacts.toml'.
> Sources attempted:
> \- https://pkg.julialang.org/artifact/695a3abd0af051dab62687501b9a61ad91c831a3
> Error: IOError: rename of "/home/nathan/.julia/artifacts/jl\_iBFnfP" to "/home/nathan/.julia/artifacts/695a3abd0af051dab62687501b9a61ad91c831a3": resource busy or locked (EBUSY)
> \- https://github.com/JuliaBinaryWrappers/iso\_codes\_jll.jl/releases/download/iso\_codes-v4.15.1+0/iso\_codes.v4.15.1.x86\_64-linux-gnu.tar.gz
> Error: IOError: rename of "/home/nathan/.julia/artifacts/jl\_97yMLY" to "/home/nathan/.julia/artifacts/695a3abd0af051dab62687501b9a61ad91c831a3": resource busy or locked (EBUSY)
> 
> Stacktrace:
> \[1\] error(s::String)
> @ Base ./error.jl:35
> \[2\] ensure\_artifact\_installed(name::String, meta::Dict{String, Any}, artifacts\_toml::String; platform::Base.BinaryPlatforms.Platform, verbose::Bool, quiet\_download::Bool, io::Pkg.UnstableIO)
> @ Pkg.Artifacts ~/github/Pkg.jl/src/Artifacts.jl:476
> \[3\] download\_artifacts(env::Pkg.Types.EnvCache; platform::Base.BinaryPlatforms.Platform, julia\_version::VersionNumber, verbose::Bool, io::Pkg.UnstableIO)
> @ Pkg.Operations ~/github/Pkg.jl/src/Operations.jl:770
> \[4\] add(ctx::Pkg.Types.Context, pkgs::Vector{Pkg.Types.PackageSpec}, new\_git::Set{Base.UUID}; preserve::Pkg.Types.PreserveLevel, platform::Base.BinaryPlatforms.Platform, target::Symbol)
> @ Pkg.Operations ~/github/Pkg.jl/src/Operations.jl:1433
> \[5\] add
> @ ~/github/Pkg.jl/src/Operations.jl:1399 \[inlined\]
> \[6\] add(ctx::Pkg.Types.Context, pkgs::Vector{Pkg.Types.PackageSpec}; preserve::Pkg.Types.PreserveLevel, platform::Base.BinaryPlatforms.Platform, target::Symbol, kwargs::@Kwargs{io::Pkg.UnstableIO})
> @ Pkg.API ~/github/Pkg.jl/src/API.jl:307
> \[7\] add(pkgs::Vector{Pkg.Types.PackageSpec}; io::Pkg.UnstableIO, kwargs::@Kwargs{})
> @ Pkg.API ~/github/Pkg.jl/src/API.jl:160
> \[8\] add(pkgs::Vector{Pkg.Types.PackageSpec})
> @ Pkg.API ~/github/Pkg.jl/src/API.jl:149
> \[9\] do\_cmd(command::Pkg.REPLMode.Command, io::Base.TTY)
> @ Pkg.REPLMode ~/github/Pkg.jl/src/REPLMode/REPLMode.jl:407
> \[10\] do\_cmds(commands::Vector{Pkg.REPLMode.Command}, io::Base.TTY)
> @ Pkg.REPLMode ~/github/Pkg.jl/src/REPLMode/REPLMode.jl:393
> \[11\] do\_cmds(repl::REPL.LineEditREPL, commands::String)
> @ REPLExt ~/github/Pkg.jl/ext/REPLExt/REPLExt.jl:92
> \[12\] (::REPLExt.var"#31#34"{REPL.LineEditREPL, REPL.LineEdit.Prompt})(s::REPL.LineEdit.MIState, buf::IOBuffer, ok::Bool)
> @ REPLExt ~/github/Pkg.jl/ext/REPLExt/REPLExt.jl:122
> \[13\] #invokelatest#2
> @ ./essentials.jl:1030 \[inlined\]
> \[14\] invokelatest
> @ ./essentials.jl:1027 \[inlined\]
> \[15\] run\_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
> @ REPL.LineEdit ~/packages/julias/julia-latest/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:2744
> \[16\] run\_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
> @ REPL ~/packages/julias/julia-latest/share/julia/stdlib/v1.12/REPL/src/REPL.jl:1406
> \[17\] (::REPL.var"#75#81"{REPL.LineEditREPL, REPL.REPLBackendRef})()
> @ REPL ~/packages/julias/julia-latest/share/julia/stdlib/v1.12/REPL/src/REPL.jl:456
> \`\`\`
> 
> Here is what this kind of error would look like before this PR (from https://discourse.julialang.org/t/installation-of-nodejs-fails-directory-not-empty/111117)
> 
> \`\`\`julia
> (tmp) pkg\> add NodeJS
> Resolving package versions...
> Downloaded artifact: nodejs\_app
> ERROR: IOError: rm("C:\\\\Users\\\\michele.zaffalon\\\\.julia\\\\artifacts\\\\jl\_Y9gBTl"): directory not empty (ENOTEMPTY)
> Stacktrace:
> \[1\] uv\_error
> @ .\\libuv.jl:100 \[inlined\]
> \[2\] rm(path::String; force::Bool, recursive::Bool)
> @ Base.Filesystem .\\file.jl:307
> \[3\] rm
> @ .\\file.jl:273 \[inlined\]
> \[4\] download\_artifact(tree\_hash::Base.SHA1, tarball\_url::String, tarball\_hash::Nothing; verbose::Bool, quiet\_download::Bool, io::Base.TTY)
> \\src\\Artifacts.jl:376
> \[5\] download\_artifact (repeats 2 times)
> @ C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\Artifacts.jl:297 \[inlined\]
> \[6\] #22
> @ C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\Artifacts.jl:423 \[inlined\]
> \[7\] with\_show\_download\_info(f::Pkg.Artifacts.var"#22#24"{Bool, Bool, Base.TTY, Base.SHA1, String}, io::Base.TTY, name::String, quiet\_download::Bool)
> @ Pkg.Artifacts C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\Artifacts.jl:480
> \[8\] ensure\_artifact\_installed(name::String, meta::Dict{String, Any}, artifacts\_toml::String; platform::Base.BinaryPlatforms.Platform, verbose::Bool, quiet\_download::Bool, io::Base.TTY)
> @ Pkg.Artifacts C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\Artifacts.jl:422
> \[9\] download\_artifacts(env::Pkg.Types.EnvCache; platform::Base.BinaryPlatforms.Platform, julia\_version::VersionNumber, verbose::Bool, io::Base.TTY)
> @ Pkg.Operations C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\Operations.jl:755
> \[10\] add(ctx::Pkg.Types.Context, pkgs::Vector{Pkg.Types.PackageSpec}, new\_git::Set{Base.UUID}; preserve::Pkg.Types.PreserveLevel, platform::Base.BinaryPlatforms.Platform)
> @ Pkg.Operations C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\Operations.jl:1394
> \[11\] add
> @ C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\Operations.jl:1376 \[inlined\]
> \[12\] add(ctx::Pkg.Types.Context, pkgs::Vector{Pkg.Types.PackageSpec}; preserve::Pkg.Types.PreserveLevel, platform::Base.BinaryPlatforms.Platform, kwargs::@Kwargs{io::Base.TTY})
> @ Pkg.API C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\API.jl:278
> \[13\] add(pkgs::Vector{Pkg.Types.PackageSpec}; io::Base.TTY, kwargs::@Kwargs{})
> @ Pkg.API C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\API.jl:159
> \[14\] add(pkgs::Vector{Pkg.Types.PackageSpec})
> @ Pkg.API C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\API.jl:148
> \[15\] do\_cmd!(command::Pkg.REPLMode.Command, repl::REPL.LineEditREPL)
> @ Pkg.REPLMode C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\REPLMode\\REPLMode.jl:412
> \[16\] do\_cmd(repl::REPL.LineEditREPL, input::String; do\_rethrow::Bool)
> @ Pkg.REPLMode C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\REPLMode\\REPLMode.jl:390
> \[17\] do\_cmd
> @ C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\REPLMode\\REPLMode.jl:380 \[inlined\]
> \[18\] (::Pkg.REPLMode.var"#24#27"{REPL.LineEditREPL, REPL.LineEdit.Prompt})(s::REPL.LineEdit.MIState, buf::IOBuffer, ok::Bool)
> @ Pkg.REPLMode C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\Pkg\\src\\REPLMode\\REPLMode.jl:557
> \[19\] #invokelatest#2
> @ .\\essentials.jl:892 \[inlined\]
> \[20\] invokelatest
> @ .\\essentials.jl:889 \[inlined\]
> \[21\] run\_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
> @ REPL.LineEdit C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\REPL\\src\\LineEdit.jl:2656
> \[22\] run\_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
> @ REPL C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\REPL\\src\\REPL.jl:1312
> \[23\] (::REPL.var"#62#68"{REPL.LineEditREPL, REPL.REPLBackendRef})()
> @ REPL C:\\Users\\michele.zaffalon\\.julia\\juliaup\\julia-1.10.2+0.x64.w64.mingw32\\share\\julia\\stdlib\\v1.10\\REPL\\src\\REPL.jl:386
> \`\`\`

Any feedback on the PR would be appreciated.

As a work around you can try using a different anti-virus, or install the packages with julia 1.9 and then use julia 1.10

---

<div class="post-metadata">

### Author: ![nhz2](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nhz2/32/44428_2.png) [@nhz2](https://discourse.julialang.org/u/nhz2)
#### Post date: [July 21, 2024, 3:59pm UTC](https://discourse.julialang.org/t/artifacts-folder-not-empty-error-when-installing-plots-jl/117289/3 "2024-07-21T15:59:25Z")

</div>

If you want to test out [Better error messages if artifact rename fails by nhz2 · Pull Request #3827 · JuliaLang/Pkg.jl · GitHub](https://github.com/JuliaLang/Pkg.jl/pull/3827)

Here are the steps.

1. Clone my fork of Pkg.jl:

```sh
git clone https://github.com/nhz2/Pkg.jl.git
cd Pkg.jl
git checkout nz/better-errors

```

1. Start julia 1.11 in the `Pkg.jl` directory:

```sh
julia +1.11 --project --startup-file=no

```

1. In julia run:

```julia
import Pkg
Pkg.pkg"activate --temp"
Pkg.pkg"add Plots"

```

Please let me know what the error message looks like with this PR.

---

<div class="post-metadata">

### Author: ![c\_sell](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/c_sell/32/38854_2.png) [@c\_sell](https://discourse.julialang.org/u/c_sell)
#### Post date: [July 24, 2024, 7:11am UTC](https://discourse.julialang.org/t/artifacts-folder-not-empty-error-when-installing-plots-jl/117289/5 "2024-07-24T07:11:31Z")

</div>

Got it working now. Had to run include(“src/Pkg.jl”) before.

You where right. The error:

```julia
> Error: your anti-virus may be interfering with artifact installation
> │ See https://github.com/JuliaLang/Pkg.jl/issues/3822
> └ @ Main.Pkg.Artifacts C:\Users\sellmann\Promotion\Programming\Julia\Projects\Package_tests\Pkg.jl\src\Artifacts.jl:81
> ┌ Error: your anti-virus may be interfering with artifact installation
> │ See https://github.com/JuliaLang/Pkg.jl/issues/3822

```

---

<div class="post-metadata">

### Author: ![nhz2](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nhz2/32/44428_2.png) [@nhz2](https://discourse.julialang.org/u/nhz2)
#### Post date: [July 24, 2024, 11:17am UTC](https://discourse.julialang.org/t/artifacts-folder-not-empty-error-when-installing-plots-jl/117289/6 "2024-07-24T11:17:18Z")

</div>

Thanks for testing this. Is there more info from the error, like a section on what artifact failed to install, or a stack trace? The error you pasted seems to be cut off.

---

<div class="post-metadata">

### Author: ![xlxs4](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xlxs4/32/223653_2.png) [@xlxs4](https://discourse.julialang.org/u/xlxs4)
#### Post date: [July 29, 2024, 8:05am UTC](https://discourse.julialang.org/t/artifacts-folder-not-empty-error-when-installing-plots-jl/117289/7 "2024-07-29T08:05:32Z")

</div>

```julia-repl
julia> Pkg.pkg"add Plots"
   Resolving package versions...
   Installed Statistics ─ v1.11.1
┌ Error: your anti-virus may be interfering with artifact installation
│ See https://github.com/JuliaLang/Pkg.jl/issues/3822
└ @ Main.Pkg.Artifacts C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Artifacts.jl:81
┌ Warning: Failed to clean up temporary directory "C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\jl_fukAt4"
│ exception = IOError: rm("C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\jl_fukAt4\\bin"): directory not empty (ENOTEMPTY)
└ @ Main.Pkg.Artifacts C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Artifacts.jl:386
┌ Error: your anti-virus may be interfering with artifact installation
│ See https://github.com/JuliaLang/Pkg.jl/issues/3822
└ @ Main.Pkg.Artifacts C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Artifacts.jl:81
┌ Warning: Failed to clean up temporary directory "C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\jl_nEUv5J"
│ exception = IOError: rm("C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\jl_nEUv5J\\bin"): directory not empty (ENOTEMPTY)
└ @ Main.Pkg.Artifacts C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Artifacts.jl:386
ERROR: Unable to automatically download/install artifact 'fzf' from sources listed in 'C:\Users\ores.ousoultzoglou\.julia\packages\fzf_jll\okrgy\Artifacts.toml'.
Sources attempted:
- https://pkg.julialang.org/artifact/8043c72c48288c74e7f13c0c4aecbd239ef872bb
    Error: IOError: rename of "C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\jl_fukAt4" to "C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\8043c72c48288c74e7f13c0c4aecbd239ef872bb": permission denied (EACCES)
- https://github.com/JuliaBinaryWrappers/fzf_jll.jl/releases/download/fzf-v0.43.0+0/fzf.v0.43.0.x86_64-w64-mingw32.tar.gz
    Error: IOError: rename of "C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\jl_nEUv5J" to "C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\8043c72c48288c74e7f13c0c4aecbd239ef872bb": permission denied (EACCES)

Stacktrace:
  [1] error(s::String)
    @ Base .\error.jl:35
  [2] ensure_artifact_installed(name::String, meta::Dict{…}, artifacts_toml::String; platform::Base.BinaryPlatforms.Platform, verbose::Bool, quiet_download::Bool, io::Main.Pkg.UnstableIO)
    @ Main.Pkg.Artifacts C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Artifacts.jl:478
  [3]
    @ Main.Pkg.Operations C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Operations.jl:770
  [4] add(ctx::Main.Pkg.Types.Context, pkgs::Vector{…}, new_git::Set{…}; preserve::Main.Pkg.Types.PreserveLevel, platform::Base.BinaryPlatforms.Platform, target::Symbol)
    @ Main.Pkg.Operations C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Operations.jl:1433
  [5] add
    @ C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Operations.jl:1399 [inlined]
  [6] add(ctx::Main.Pkg.Types.Context, pkgs::Vector{…}; preserve::Main.Pkg.Types.PreserveLevel, platform::Base.BinaryPlatforms.Platform, target::Symbol, kwargs::@Kwargs{…})
    @ Main.Pkg.API C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\API.jl:307
  [7] add(pkgs::Vector{Main.Pkg.Types.PackageSpec}; io::Main.Pkg.UnstableIO, kwargs::@Kwargs{})
    @ Main.Pkg.API C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\API.jl:160
  [8] add(pkgs::Vector{Main.Pkg.Types.PackageSpec})
    @ Main.Pkg.API C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\API.jl:149
  [9] do_cmd(command::Main.Pkg.REPLMode.Command, io::Main.Pkg.UnstableIO)
    @ Main.Pkg.REPLMode C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\REPLMode\REPLMode.jl:407
 [10] do_cmds(commands::Vector{Main.Pkg.REPLMode.Command}, io::Main.Pkg.UnstableIO)
    @ Main.Pkg.REPLMode C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\REPLMode\REPLMode.jl:393
 [11] do_cmds(input::String, io::Main.Pkg.UnstableIO)
    @ Main.Pkg.REPLMode C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\REPLMode\REPLMode.jl:383
 [12] pkgstr(str::String)
    @ Main.Pkg.REPLMode C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\REPLMode\REPLMode.jl:450
 [13] top-level scope
    @ REPL[4]:1
Some type information was truncated. Use `show(err)` to see complete types.

julia> show(err)
1-element ExceptionStack:
Unable to automatically download/install artifact 'fzf' from sources listed in 'C:\Users\ores.ousoultzoglou\.julia\packages\fzf_jll\okrgy\Artifacts.toml'.
Sources attempted:
- https://pkg.julialang.org/artifact/8043c72c48288c74e7f13c0c4aecbd239ef872bb
    Error: IOError: rename of "C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\jl_fukAt4" to "C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\8043c72c48288c74e7f13c0c4aecbd239ef872bb": permission denied (EACCES)
- https://github.com/JuliaBinaryWrappers/fzf_jll.jl/releases/download/fzf-v0.43.0+0/fzf.v0.43.0.x86_64-w64-mingw32.tar.gz
    Error: IOError: rename of "C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\jl_nEUv5J" to "C:\\Users\\ores.ousoultzoglou\\.julia\\artifacts\\8043c72c48288c74e7f13c0c4aecbd239ef872bb": permission denied (EACCES)

Stacktrace:
  [1] error(s::String)
    @ Base .\error.jl:35
  [2] ensure_artifact_installed(name::String, meta::Dict{String, Any}, artifacts_toml::String; platform::Base.BinaryPlatforms.Platform, verbose::Bool, quiet_download::Bool, io::Main.Pkg.UnstableIO)
    @ Main.Pkg.Artifacts C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Artifacts.jl:478
  [3] download_artifacts(env::Main.Pkg.Types.EnvCache; platform::Base.BinaryPlatforms.Platform, julia_version::VersionNumber, verbose::Bool, io::Main.Pkg.UnstableIO)
    @ Main.Pkg.Operations C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Operations.jl:770
  [4] add(ctx::Main.Pkg.Types.Context, pkgs::Vector{Main.Pkg.Types.PackageSpec}, new_git::Set{Base.UUID}; preserve::Main.Pkg.Types.PreserveLevel, platform::Base.BinaryPlatforms.Platform, target::Symbol)
    @ Main.Pkg.Operations C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Operations.jl:1433
  [5] add
    @ C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\Operations.jl:1399 [inlined]
  [6] add(ctx::Main.Pkg.Types.Context, pkgs::Vector{Main.Pkg.Types.PackageSpec}; preserve::Main.Pkg.Types.PreserveLevel,
 platform::Base.BinaryPlatforms.Platform, target::Symbol, kwargs::@Kwargs{io::Main.Pkg.UnstableIO})
    @ Main.Pkg.API C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\API.jl:307
  [7] add(pkgs::Vector{Main.Pkg.Types.PackageSpec}; io::Main.Pkg.UnstableIO, kwargs::@Kwargs{})
    @ Main.Pkg.API C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\API.jl:160
  [8] add(pkgs::Vector{Main.Pkg.Types.PackageSpec})
    @ Main.Pkg.API C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\API.jl:149
  [9] do_cmd(command::Main.Pkg.REPLMode.Command, io::Main.Pkg.UnstableIO)
    @ Main.Pkg.REPLMode C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\REPLMode\REPLMode.jl:407
 [10] do_cmds(commands::Vector{Main.Pkg.REPLMode.Command}, io::Main.Pkg.UnstableIO)
    @ Main.Pkg.REPLMode C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\REPLMode\REPLMode.jl:393
 [11] do_cmds(input::String, io::Main.Pkg.UnstableIO)
    @ Main.Pkg.REPLMode C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\REPLMode\REPLMode.jl:383
 [12] pkgstr(str::String)
    @ Main.Pkg.REPLMode C:\Users\ores.ousoultzoglou\GitHub\Pkg.jl\src\REPLMode\REPLMode.jl:450
 [13] top-level scope
    @ REPL[4]:1

```
