Hello,
about 3-4 years ago we published a textbook that utilized Julia and had code snippets integrated into the book pages. In addition, we associated with this textbook a GitHub repository in which we provide all the code to generate all the figures in the book and some other stuff. We utilized Julia’s Pkg
manager and saved the Project.toml and Manifest.toml files, hoping that this will be enough to establish reproducibility for at least some number of years.
The problem is, the codebase is not installable anymore. My approach is to download the Project.toml and Manifest.toml files from this folder:
(note the choice of a particular tag)
then, install Julia 1.5 version (the version we used at that time, and the version associated with the Manifest generation). Then, I do Pkg.activate("path to downloaded Project+Manifest")
. But already I am faced with an error:
(@v1.5) pkg> activate C:\Users\gd419\Downloads\NonlinearDynamicsTextbook-1.0
┌ Error: Could not parse entry for `deps`
└ @ Pkg.Types C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\manifest.jl:146
ERROR: MethodError: no method matching get(::Pair{String,Any}, ::String, ::Nothing)
Closest candidates are:
get(::REPL.Terminals.TTYTerminal, ::Any, ::Any) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\REPL\src\Terminals.jl:161
get(::Base.EnvDict, ::AbstractString, ::Any) at env.jl:80
get(::IdDict{K,V}, ::Any, ::Any) where {K, V} at iddict.jl:86
...
Stacktrace:
[1] Dict{Base.UUID,Pkg.Types.PackageEntry}(::Dict{String,Any}) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\manifest.jl:135
[2] read_manifest(::String) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\manifest.jl:177
[3] Pkg.Types.EnvCache(::Nothing) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\Types.jl:299
[4] EnvCache at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\Types.jl:279 [inlined]
[5] Pkg.Types.Context() at .\util.jl:438
[6] activate(::String; shared::Bool, temp::Bool) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\API.jl:955
[7] activate(::String) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\API.jl:920
[8] do_cmd!(::Pkg.REPLMode.Command, ::REPL.LineEditREPL) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\REPLMode\REPLMode.jl:401
[9] do_cmd(::REPL.LineEditREPL, ::String; do_rethrow::Bool) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\REPLMode\REPLMode.jl:382
[10] do_cmd at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\REPLMode\REPLMode.jl:377 [inlined]
[11] (::Pkg.REPLMode.var"#24#27"{REPL.LineEditREPL,REPL.LineEdit.Prompt})(::REPL.LineEdit.MIState, ::Base.GenericIOBuffer{Array{UInt8,1}}, ::Bool) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Pkg\src\REPLMode\REPLMode.jl:546
[12] #invokelatest#1 at .\essentials.jl:710 [inlined]
[13] invokelatest at .\essentials.jl:709 [inlined]
[14] run_interface(::REPL.Terminals.TextTerminal, ::REPL.LineEdit.ModalInterface, ::REPL.LineEdit.MIState) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\REPL\src\LineEdit.jl:2355
[15] run_frontend(::REPL.LineEditREPL, ::REPL.REPLBackendRef) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\REPL\src\REPL.jl:1144
[16] (::REPL.var"#38#42"{REPL.LineEditREPL,REPL.REPLBackendRef})() at .\task.jl:356
searching online for this error people here on discourse seem to associate it with being solved at Julia 1.6.2, but the problem is, I cannot use this old Manifest.toml file with Julia 1.6. Indeed, trying the same steps with Julia 1.6 makes the Pkg.activate(...)
command succeed, but unfortunately the subsequent Pkg.instantiate(...)
command, which I also must run to ensure same environment, fails at Julia 1.6 with:
(NonlinearDynamicsTextbook) pkg> instantiate
┌ Warning: The active manifest file has dependencies that were resolved with a different julia version (1.7.0). Unexpected behavior may occur.
└ @ C:\Users\gd419\Downloads\NonlinearDynamicsTextbook-1.0\Manifest.toml:0
ERROR: Error collecting information for dependency libblastrampoline_jll [8e850b90-86db-534c-a0d3-1478176c7d93].
This error can occur if the manifest file you are using was generated by a different version of Julia and as a result is not compatible with this Julia version (1.6.7)
(and the error message is totally expected to be fair)
Is there anything I can do to make this archived Project+Manifest files installable and runnable? Any help would be appreciated as the textbook has now succeeded in attracting a readership of meaningful size.