How to install FFTW.jl offline?

I am trying to install FFTW.jl on a cluster on which I do not have internet access. Usually I just clone the package and add it to julia using the local path. However FFTW.jl seems to want to download the source from the internet, and I end up a build failure:

Error: Error building `FFTW`: 
│ ┌ Warning: platform_key() is deprecated, use platform_key_abi() from now on
│ │   caller = ip:0x0
│ └ @ Core :-1
│ ┌ Warning: Could not extract the platform key of https://github.com/JuliaMath/FFTWBuilder/releases/download/v3.3.8+1/FFTW.x86_64-linux-gnu.tar.gz; continuing...
│ └ @ BinaryProvider ~/.julia/packages/BinaryProvider/R2JRE/src/Prefix.jl:185
│ [ Info: Downloading https://github.com/JuliaMath/FFTWBuilder/releases/download/v3.3.8+1/FFTW.x86_64-linux-gnu.tar.gz to /home/jishnu/.julia/packages/FFTW/zbqte/deps/usr/downloads/FFTW.x86_64-linux-gnu.tar.gz...
│ ERROR: LoadError: LoadError: Could not download https://github.com/JuliaMath/FFTWBuilder/releases/download/v3.3.8+1/FFTW.x86_64-linux-gnu.tar.gz to /home/jishnu/.julia/packages/FFTW/zbqte/deps/usr/downloads/FFTW.x86_64-linux-gnu.tar.gz:
│ ErrorException("")
│ Stacktrace:
│  [1] error(::String) at ./error.jl:33
│  [2] macro expansion at ./logging.jl:313 [inlined]
│  [3] #download#89(::Bool, ::Function, ::String, ::String) at /home/jishnu/.julia/packages/BinaryProvider/R2JRE/src/PlatformEngines.jl:487
│  [4] #download at ./none:0 [inlined]
│  [5] #download_verify#90(::Bool, ::Bool, ::Bool, ::Function, ::String, ::String, ::String) at /home/jishnu/.julia/packages/BinaryProvider/R2JRE/src/PlatformEngines.jl:567
│  [6] #download_verify at ./none:0 [inlined]
│  [7] #install#129(::Prefix, ::String, ::Bool, ::Bool, ::Bool, ::Function, ::String, ::String) at /home/jishnu/.julia/packages/BinaryProvider/R2JRE/src/Prefix.jl:314
│  [8] (::getfield(BinaryProvider, Symbol("#kw##install")))(::NamedTuple{(:prefix, :force, :verbose),Tuple{Prefix,Bool,Bool}}, ::typeof(install), ::String, ::String) at ./none:0
│  [9] top-level scope at /home/jishnu/.julia/packages/FFTW/zbqte/deps/build_fftw.jl:37
│  [10] include at ./boot.jl:317 [inlined]
│  [11] include_relative(::Module, ::String) at ./loading.jl:1038
│  [12] include(::Module, ::String) at ./sysimg.jl:29
│  [13] include(::String) at ./client.jl:398
│  [14] top-level scope at /home/jishnu/.julia/packages/FFTW/zbqte/deps/build.jl:49
│  [15] include at ./boot.jl:317 [inlined]
│  [16] include_relative(::Module, ::String) at ./loading.jl:1038
│  [17] include(::Module, ::String) at ./sysimg.jl:29
│  [18] include(::String) at ./client.jl:398
│  [19] top-level scope at none:0
│ in expression starting at /home/jishnu/.julia/packages/FFTW/zbqte/deps/build_fftw.jl:33
│ in expression starting at /home/jishnu/.julia/packages/FFTW/zbqte/deps/build.jl:20
│ [12:20:13] 
│ [12:20:13] curl: (7) Failed to connect to github.com port 443: Connection timed out
└ @ Pkg.Operations /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v0.7/Pkg/src/Operations.jl:1068

I’ve tried downloading the tar file on my personal computer and placing it at the appropriate location, but that doesn’t seem to help, the build process still tries to download it and fails. Is there any way to get around this?

1 Like

I’m having the same problem for quite a few packages. Did you find a workaround?

This is brute but I think it works.

You need a computer with internet access. On both this computer, and the cluster, note the value of the environment variable JULIA_DEPOT_PATH, as this is where packages are installed. If the environment variable is not defined, it means it’s using the default location (~/.julia).

On the computer with internet access, install the desired package. Then copy the full contents of the depot to the cluster, replacing the previous depot.