Given up installing any plotting packages

Did you delete the artifact after installing 1.10.1 though? The problem can only be solved if the artifact is re-installed, if you simply use another Julia version while leaving the inaccessible artifact in place, that Julia version will attempt to re-use that same artifact.

For the same reason another workaround to this problem is to install the artifact with Julia 1.9, which did not have this permissions issue. In any event the key here is to delete the

...\.julia\artifacts\1b573c0aaf4a3a73f296a61c2cacbee17ac0d4e3

folder before attempting another installation either from 1.9 or 1.10.1.

As I mentioned in a previous post, I do not have administrator permissions on my work machine.

“You could go to the artefact right click properties security and check all the permissions same for the folder artefacts and the one before”. I have done this for some directories and files. On some directories, the check is “light” or dimmed, and not regular. I do not know what this means. If it means administrator-controlled, I am back to square one.

~WRD0001.jpg

Deleted the artifact and tried reinstalling Plots. No cigar.

Yesterday I installed Julia in a classroom computer where I have no administrator privileges and where I’m not even allowed to install anything.

I tricked the system by installing the portable version and from it I installed GMT (another plotting, and else, package) with no problems, and the same should go for any other packages.

Given that package installs are done from an user with low privileges, I don’t see how your current troubles can occur. Unless the true problem is not one of file permissions.

2 Likes

It means that permission applies to some by not all of the files in the directory. Uncheck it and then recheck it, then hit apply to give all files those permissions.

Could you try running the following code in the REPL and let us know the output?

      using REPL

      function check_user_permissions(path = joinpath(DEPOT_PATH[1], "artifacts"); perm = 4)
           println("Checking permissions in $path")
           print("Status: starting ...")
           problems_found = 0
           for (root, dirs, files) in walkdir(path)
               for d in dirs
                   REPL.Terminals.clear_line(Base.active_repl.t)
                   print("Status: checking $d")
                   d = joinpath(root, d)
                   u = uperm(d)
                   if u | perm != u
                       problems_found +=1
                       println(u, " ", d)
                   end
               end
               for file in files
                   REPL.Terminals.clear_line(Base.active_repl.t)
                   print("Status: checking $file")
                   file = joinpath(root, file)
                   u = uperm(file)
                   if u | perm != u
                       problems_found += 1
                       println(u, " ", file)
                   end
               end
           end
           REPL.Terminals.clear_line(Base.active_repl.t)
           println("Status: Scan completed!")
           println(problems_found > 0 ? "$problems_found Problem(s) were found" : "No problems were found")
           return nothing
       end
       check_user_permissions()

Well something changed, and it’s most likely because of corporate policy (but not about e.g. new Julia version), i.e. they locked down something, i.e. running .dll, seemingly all…? If that’s the case then most or all pure Julia software likely should work, but e.g. most JLLs would not, and it’s not always obvious if you’re using .dll`s and/r JLLs (you see in the Manifest.toml and/or at juliahub looking at (indirect) dependencies).

So this would likely happen with other software, e.g. matplotlib in Python, too?! You could try PythonPlot.jl which is actually calling the same matplotlib, or try it directly from Python.

I don’t know if there are pure Julia (or Python) plotting packages. I suspect UnicodePlots.jl is, well pretty sure… and that it would work. I also thought Makie.jl was too, at least the non-GL version.

If that’s a simple trick that works (and why, why not blocked too? could we rely on such never blocked?), then there is an official portable Julia versions, and maybe arguably it should come with some blessed (plotting) software? Or maybe not since all added there just works?

1 Like

Did you try with Julia 1.9?

Edit: re-reading the thread, I think perhaps you won’t have permissions to do this either :frowning: depends if the administrator would be able to help you take this approach?

It’s become an internet meme to solve problems with Windows by using Linux, in fact I went from Windows to WSL to Debian. As has already been mentioned, WSL can have its own problems.

While these suggestions are well meant, moving to linux has saved me a ton of headaches, it’s not always the most useful advice; especially in your case where it’s not an option.

What might be more useful, as it’s something many developers do to avoid the “it works on my machine” syndrome, is using a tool like Vagrant to create a “devbox”. In other words, a reproducible development environment.

Virtualisation would need to be enabled in the BIOS (UEFI) and you would need to have the permissions necessary to install vagrant, obviously. Then you can use Hyper-V as a provider and run any OS you like in the guest virtual machine. There’s also the question of whether the machine has enough power (CPU and RAM) to run Windows and a VM (Virtual Machine) with whatever you’re using Julia for.

Perhaps not an immediate solution, but something to think about longer-term if you keep running into problems.

Dear Andy:

As my problems have been happening on my office machine, I am now using on a stand-alone Internet-connected Windows 7 machine at work, and Windows 10 machine at home. All is fine with those two. There are time when software seems to install on my work machine, but does not work. VS code works when installed on my local drive, but not a network drive (it used to work on the network drive). Pharo Smalltalk does not work but Squeak does. Go figure.

I have heard of virtualization software, and have considered using it. The one with which I am the most familiar is VMWare. Are Vagrant and VMware essentially the same?

And thank you for your reply.

Indeed I did. However, this is a horse of a much different color. In this case, a dll could not be found. The “bin” directory is empty. Output follows:

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.9.4 (2023-11-14)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

(@v1.9) pkg> add Plots
    Updating registry at `C:\Users\vhaglasmithdi\.julia\registries\General.toml`
   Resolving package versions...
  No Changes to `C:\Users\vhaglasmithdi\.julia\environments\v1.9\Project.toml`
  No Changes to `C:\Users\vhaglasmithdi\.julia\environments\v1.9\Manifest.toml`

julia> using Plots
[ Info: Precompiling Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80]
ERROR: LoadError: InitError: could not load library "C:\Users\vhaglasmithdi\.julia\artifacts\6f5e7c4e3249d2073c64e6beaa3abcd7ae4fa9bc\bin\libogg-0.dll"
The specified module could not be found.
Stacktrace:
  [1] dlopen(s::String, flags::UInt32; throw_error::Bool)
    @ Base.Libc.Libdl .\libdl.jl:117
  [2] dlopen(s::String, flags::UInt32)
    @ Base.Libc.Libdl .\libdl.jl:116
  [3] macro expansion
    @ C:\Users\vhaglasmithdi\.julia\packages\JLLWrappers\pG9bm\src\products\library_generators.jl:63 [inlined]
  [4] __init__()
    @ Ogg_jll C:\Users\vhaglasmithdi\.julia\packages\Ogg_jll\T4g4x\src\wrappers\x86_64-w64-mingw32.jl:8
  [5] register_restored_modules(sv::Core.SimpleVector, pkg::Base.PkgId, path::String)
    @ Base .\loading.jl:1115
  [6] _include_from_serialized(pkg::Base.PkgId, path::String, ocachepath::String, depmods::Vector{Any})
    @ Base .\loading.jl:1061
  [7] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String, build_id::UInt128)
    @ Base .\loading.jl:1506
  [8] _require(pkg::Base.PkgId, env::String)
    @ Base .\loading.jl:1783
  [9] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base .\loading.jl:1660
 [10] macro expansion
    @ .\loading.jl:1648 [inlined]
 [11] macro expansion
    @ .\lock.jl:267 [inlined]
 [12] require(into::Module, mod::Symbol)
    @ Base .\loading.jl:1611
 [13] include(mod::Module, _path::String)
    @ Base .\Base.jl:457
 [14] top-level scope
    @ C:\Users\vhaglasmithdi\.julia\packages\JLLWrappers\pG9bm\src\toplevel_generators.jl:192
 [15] include
    @ .\Base.jl:457 [inlined]
 [16] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
    @ Base .\loading.jl:2049
 [17] top-level scope
    @ stdin:3
during initialization of module Ogg_jll
in expression starting at C:\Users\vhaglasmithdi\.julia\packages\libvorbis_jll\F1e3O\src\wrappers\x86_64-w64-mingw32.jl:4
in expression starting at C:\Users\vhaglasmithdi\.julia\packages\libvorbis_jll\F1e3O\src\libvorbis_jll.jl:2
in expression starting at stdin:3
ERROR: LoadError: Failed to precompile libvorbis_jll [f27f6e37-5d2b-51aa-960f-b287f2bc3b7a] to "C:\\Users\\vhaglasmithdi\\.julia\\compiled\\v1.9\\libvorbis_jll\\jl_A34E.tmp".
Stacktrace:
  [1] error(s::String)
    @ Base .\error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
    @ Base .\loading.jl:2294
  [3] compilecache
    @ .\loading.jl:2167 [inlined]
  [4] _require(pkg::Base.PkgId, env::String)
    @ Base .\loading.jl:1805
  [5] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base .\loading.jl:1660
  [6] macro expansion
    @ .\loading.jl:1648 [inlined]
  [7] macro expansion
    @ .\lock.jl:267 [inlined]
  [8] require(into::Module, mod::Symbol)
    @ Base .\loading.jl:1611
  [9] include(mod::Module, _path::String)
    @ Base .\Base.jl:457
 [10] top-level scope
    @ C:\Users\vhaglasmithdi\.julia\packages\JLLWrappers\pG9bm\src\toplevel_generators.jl:192
 [11] include
    @ .\Base.jl:457 [inlined]
 [12] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
    @ Base .\loading.jl:2049
 [13] top-level scope
    @ stdin:3
in expression starting at C:\Users\vhaglasmithdi\.julia\packages\FFMPEG_jll\wpaSV\src\wrappers\x86_64-w64-mingw32.jl:9
in expression starting at C:\Users\vhaglasmithdi\.julia\packages\FFMPEG_jll\wpaSV\src\FFMPEG_jll.jl:2
in expression starting at stdin:3
ERROR: LoadError: Failed to precompile FFMPEG_jll [b22a6f82-2f65-5046-a5b2-351ab43fb4e5] to "C:\\Users\\vhaglasmithdi\\.julia\\compiled\\v1.9\\FFMPEG_jll\\jl_539D.tmp".
Stacktrace:
  [1] error(s::String)
    @ Base .\error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
    @ Base .\loading.jl:2294
  [3] compilecache
    @ .\loading.jl:2167 [inlined]
  [4] _require(pkg::Base.PkgId, env::String)
    @ Base .\loading.jl:1805
  [5] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base .\loading.jl:1660
  [6] macro expansion
    @ .\loading.jl:1648 [inlined]
  [7] macro expansion
    @ .\lock.jl:267 [inlined]
  [8] require(into::Module, mod::Symbol)
    @ Base .\loading.jl:1611
  [9] include
    @ .\Base.jl:457 [inlined]
 [10] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
    @ Base .\loading.jl:2049
 [11] top-level scope
    @ stdin:3
in expression starting at C:\Users\vhaglasmithdi\.julia\packages\FFMPEG\OUpap\src\FFMPEG.jl:1
in expression starting at stdin:3
ERROR: LoadError: Failed to precompile FFMPEG [c87230d0-a227-11e9-1b43-d7ebe4e7570a] to "C:\\Users\\vhaglasmithdi\\.julia\\compiled\\v1.9\\FFMPEG\\jl_8A71.tmp".
Stacktrace:
  [1] error(s::String)
    @ Base .\error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
    @ Base .\loading.jl:2294
  [3] compilecache
    @ .\loading.jl:2167 [inlined]
  [4] _require(pkg::Base.PkgId, env::String)
    @ Base .\loading.jl:1805
  [5] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base .\loading.jl:1660
  [6] macro expansion
    @ .\loading.jl:1648 [inlined]
  [7] macro expansion
    @ .\lock.jl:267 [inlined]
  [8] require(into::Module, mod::Symbol)
    @ Base .\loading.jl:1611
  [9] include(mod::Module, _path::String)
    @ Base .\Base.jl:457
 [10] include(x::String)
    @ Plots C:\Users\vhaglasmithdi\.julia\packages\Plots\sxUvK\src\Plots.jl:1
 [11] top-level scope
    @ C:\Users\vhaglasmithdi\.julia\packages\Plots\sxUvK\src\Plots.jl:168
 [12] include
    @ .\Base.jl:457 [inlined]
 [13] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
    @ Base .\loading.jl:2049
 [14] top-level scope
    @ stdin:3
in expression starting at C:\Users\vhaglasmithdi\.julia\packages\Plots\sxUvK\src\animation.jl:1
in expression starting at C:\Users\vhaglasmithdi\.julia\packages\Plots\sxUvK\src\Plots.jl:1
in expression starting at stdin:3
ERROR: Failed to precompile Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80] to "C:\\Users\\vhaglasmithdi\\.julia\\compiled\\v1.9\\Plots\\jl_75C.tmp".
Stacktrace:
 [1] error(s::String)
   @ Base .\error.jl:35
 [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
   @ Base .\loading.jl:2294
 [3] compilecache
   @ .\loading.jl:2167 [inlined]
 [4] _require(pkg::Base.PkgId, env::String)
   @ Base .\loading.jl:1805
 [5] _require_prelocked(uuidkey::Base.PkgId, env::String)
   @ Base .\loading.jl:1660
 [6] macro expansion
   @ .\loading.jl:1648 [inlined]
 [7] macro expansion
   @ .\lock.jl:267 [inlined]
 [8] require(into::Module, mod::Symbol)
   @ Base .\loading.jl:1611

julia>

Not quite. Vagrant is a tool for automating the setup of development “boxes” and it needs some sort of hypervisor to run on, which could be Hyper-V, VirtualBox, or I think VMWare too. As my underlying operating system is linux, I use QEMU with libvirt, but you would want one of those first three on Windows.

Ah, yes, the VMWare docs for vagrant, probably the only one I haven’t used.

Very odd - I would nuke the .artifacts folder to make sure things are downloaded afresh.

Post script to this thread: I tried adding Plots to every 1.9+ and every 1.10+ version of Julia on my work machine. Nothing worked. Various and sundry problems. Then installed 1.8.5. and added Plots. Installed fine. Tried “plot(rand(10))”. no problems.
How is that for a kick in the head? Have no idea what is going on. I hope that 1.8.5 will suffice for my work.

That’s a bit strange, but does hint at a potential solution. You could try Julia 1.10 with julia +1.10 --pkgimages=no.

The +1.10 assumes that you are using juliaup.

try JuliaComputing/PlotlyLight.jl: Plotly.js via Julia made easy. (github.com)