JuliaPy / Conda.jl

Conda managing Julia binary dependencies
Other
173 stars 57 forks source link

why is Conda 3 gigabytes #116

Closed lewisl closed 6 years ago

lewisl commented 6 years ago

Under Julia 0.7, conda always installs Anaconda and not miniconda. I have a functioning Python 3.7 environment I prefer to use. PyCall can be instructed to use it. However, building PyPlot will force the install of the entire ginormous Conda with Anaconda. Under Julia 0.6 and earlier I could just delete Conda/deps after the damage was done and everything worked. With the added complexity of the new packaging system this no longer works.

This duplication of independent plumbing will be the bane of Julia. I realize it is supposed to be a nice "batteries included" strategy, but the real result are new things to maintain as subtly different forks from the standard plumbing. Sadly, this applies to both Conda and Brew.

Neither should be necessary. I've read the standard answer as it applies to brew: some binary dependencies require Julia specific versions. This seems an invalid reason for requiring an entirely distinct set of plumbing. If only a handful of brew formula need to be different, name them accordingly and remove the wrong ones and install the right ones. Julia packages with those dependencies should just use the appropriately named binary dependencies.

Then, Julia package authors/maintainers can stop the duplicative work and contribute to parts of Julia that are distinct (and wonderful).

So, the practical question again is: how can I either remove the entire Python carted around by Conda.jl OR reduce it from its staggering 3G size? For comparison, my Python 3.7 with Matplotlib, numpy, and Jupyter (the only things key Julia packages like PyPlot and Julia really need from Python) is a mere 380 meg.

stevengj commented 6 years ago

However, building PyPlot will force the install of the entire ginormous Conda with Anaconda.

That's not true. PyPlot uses whatever Python PyCall uses. If you configure PyCall (and IJulia) to use your own Python installation, Conda.jl will not be used and will not install anything.

how can I either remove the entire Python carted around by Conda.jl

To remove the Conda installation and reconfigure PyCall and IJulia to use your own python, do

using Conda
rm(Conda.ROOTENV, recursive=true)
ENV["PYTHON"]="/path/to/your/python"
ENV["JUPYTER"]="/path/to/your/jupyter"
Pkg.build("PyCall")
Pkg.build("IJulia")

reduce it from its staggering 3G size?

It's only 1G on my machine, but in any case complain to Anaconda — what dependencies get installed is not decided by Conda.jl.

lewisl commented 6 years ago

Thanks. What happened happened. I believe that installing IJulia brought in lots of stuff and a full Anaconda was installed with Conda. When I build PyCall I always set the ENV. Didn’t realize I could do the same for IJulia.

Unfortunately, rm doesn’t solve the cleanup problem as rm’ing a package leaves it in place. So, the next time that Conda must be installed as a dependency, you get whatever you had before: big or small. This is true if you delete the directory for Conda from Julia/packages. Once upon a time you suggested just deleting the deps directory for Conda, but that no longer works.

Where the packages cached? I looked for an entry in ENV[“JULIA_DEPOT_PATH”] or ENV[“DEPOT_PATH”] and neither exist (nor anything that looks like it fits this purpose).

lewisl commented 6 years ago

Steven, Apologies for tone and my error. After several reinstalls Conda deps/usr is zero bytes. The size was being misreported by a Finder substitute that seems to have erroneously cached an old folder size. Even after repeatedly refreshing, it never got the folder size calc correct. ls -la correctly reported the size, as did Finder.

stevengj commented 6 years ago

Unfortunately, rm doesn’t solve the cleanup problem as rm’ing a package leaves it in place. So, the next time that Conda must be installed as a dependency, you get whatever you had before: big or small.

The Conda.jl package itself is tiny, so it is no problem for other packages to have a dependency on Conda. Installation of a miniconda distro is only triggered if something tries to do Conda.add, which will not happen if you've configured packages like PyCall and IJulia not to use Conda.

lewisl commented 6 years ago

Yes—the “cache” is simply the original installation directory. Deleting it and installing PyCall and IJulia using the explicit references resulted in a tiny conda. Interestingly, Forklift continued to report the large size of .../deps/usr until I quit and restarted Forklift.