Hi,
I am doing some work quite unrelated to the reading of CSV-files, however I am very much impacted by the issue described in csv-jl-fails-precompling #67195.
Since my preferred package (GeoArrays.jl, which has a dependancy to CSV.jl) worked earlier this summer, I tried reverting back to Julia 1.5.4, however I still get the same up-to-date-version of CSV.jl and therefore the the issue persists.
Is there a way forward for me (besides just waiting for the CSV-issue to get resolved)? Is there, for example, a way of only loading packages that are older than some chosen date (kind of like a time-capsule)?
Martin
PS. I am in principle using environments, however it appears I didn’t make a proper backup of the appropriate manifest file. I must also admit that I find it a bit stressful to maintain a library of manifest file in order to be prepared for situations like this one.
Hi Sukera,
Thanks for your speedy response. Unfortunatly the work-around in question doesn’t work for me, the problem persists even though I have the following in the manifest file:
[[Parsers]]
deps = [“Dates”]
git-tree-sha1 = “bfd7d8c7fd87f04543810d9cbd3995972236ba1b”
pinned = true
uuid = “69de0a69-1ddd-5017-9359-2bf0b02dc9f0”
version = “1.1.2”
There is no version 1.2.1 (I suspect that was a typo for 1.1.2), but @mike_k seems to have it working with an earlier version of Julia than I’m using. I guess I’ll just have to wait.
Thanks so much for your efforts, however neither the combination
Parsers v1.1.2 + CSV v0.8.0 nor Parsers v1.1.2 + CSV v0.8.5
work for me. So I am also in waiting mode.
In the mean time:
Is some kind of time-capsule functionality (as hinted at in the original post) feasible? Or can we (and by that I mean someone much more competent than me) come up with other ideas for how to mitigate situations like this in the future?
Also, for future robustness: Does the whole package need to fail to load, if one part of it (or one dependency) fails to precompile?
That functionality already exists: If you keep your old Manifest.toml around and only instantiate it, pinning all versions to their original ones and don’t update, old code will still work as it originally did (provided you’re using the same julia version). Manifest.toml has as its sole purpose to record package versions.
A dependency is a dependency for a reason: The package requires functionality provided by it. Since the smallest unit of encapsulation is a julia package, there is no smaller part that could be reasonably swapped out for something else - it’s a whole version or no version. There’s no mixing between versions of the same package.
If all dependencies are properly versioned, package versions should only be able installable with working versions. If some sub-dependency fails to precompile, something has gone wrong during that version tagging process.
–
I don’t understand though why neither combination works for you. Are you certain those two are the versions actually installed & pinned? Do you have any other packages in those environments? Can you try two empty environments with both combinations of packages?
I started with a clean environment, pinning Parsers to version 1.1.2. I separately tried both the current CSV (0.8.5) which has Parsers v2 its Project.toml and an older version (0.8.0) which has Parsers v1. The first failed immediately, saying there was no compatible version. The second failed on using CSVwith the error I reported above.
fyi: just to exclude the following: I gave it a try with Julia-1.7.0-beta4 and it still works on my machine (Ubuntu 18.04). Maybe the problem is related to Windows (?). Sorry, I have no more ideas.
Actually it seems to work outside Atom (terribly sorry that I didn’t check that until now!). I will repost when I have updated/downgraded the atom related packages to make it work also inside atom (possibly it is just a simple update that is required). Regardless it means that I can work again, so: good times!
Same for me. Starting in an empty directory, activating that directory, then adding Parsers and pinning to 1.1.2, any of add CSV, add CSV@0.8.0, add CSV@0.8.5 does the initial precompilation, but fails with
...expected UnionAll, got Type{Parsers.Options}
when trying using CSV.
I thought I didn’t understand the dependency chain. Now I’m sure of it
EDIT: I should have said that this is all in the REPL, using Windows Terminal.
This made me wonder what might be different between your setup and mine. That suggested I try running Julia without my usual startup file. When I did that, I got exactly the same results that you did.
Then I did a series of runs, repeating what I had just done, but adding one of the packages I usually load in my startup before activate/add/using. Everything ran smoothly until I added JuliaFormatter first. Then I had the compilation error.
It might be that other packages that require some sort of parsing produce similar results (Revise is one I thought could be a problem, but it isn’t). If nothing else, I nowe understand that an environment is not necessarily as ‘clean’ as I think it is.