# Transitioning from Ubuntu PPA to official binaries

**URL:** <https://discourse.julialang.org/t/transitioning-from-ubuntu-ppa-to-official-binaries/28650>\
**Category:** New to Julia\
**Created:** [September 11, 2019, 1:55pm UTC](https://discourse.julialang.org/t/transitioning-from-ubuntu-ppa-to-official-binaries/28650 "2019-09-11T13:55:36Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Vectornaut](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vectornaut/32/10469_2.png) [@Vectornaut](https://discourse.julialang.org/u/Vectornaut)\
**Post date:** [September 11, 2019, 1:55pm UTC](https://discourse.julialang.org/t/transitioning-from-ubuntu-ppa-to-official-binaries/28650/1 "2019-09-11T13:55:36Z")

</div>

I maintain my Julia installation from @staticfloat’s [PPA](https://launchpad.net/~staticfloat), and I wish I could keep doing that.＊ However, it’s time for me to move on from version 0.5, which means I need to transition to the official binaries. How can I do this without creating version conflicts, or leaving obsolete junk files all over my system?

＊ Thank you, @staticfloat! Without the PPA, I might never have tried Julia.

**Stability**

Ideally, I’d like to make sure that I have at least one working Julia installation on my system at all times during the transition, because there’s no good time for my Julia code to be unavailable. I’d also like to be able to get back to my old system state if I really need to—for example, if I’m asked to run a program on short notice, and I discover that it no longer works under Julia 1.2.

**Package files**

Will the new package manager (introduced with Julia 1.0) respect the directory structure of `~/.julia` set up by the old package manager, creating a `v1.2` directory for the packages I install after the transition? If not, how do I transition to the new package manager?

**Operating system integration**

The newer Julia releases seem to live entirely in a single directory, but my installation has binaries scattered across many different directories, including

- `/usr/lib/x86_64-linux-gnu`
- `/usr/bin`
- `/usr/share`
- `/usr/share/applications`
- `/usr/share/lintian`
- `/usr/share/doc`
- `/usr/share/appdata`
- `/usr/share/man`
- `/usr/include`
- `/usr/etc`
- `/etc`

Will Julia really still work the way I’m used to when all this stuff is gone?

---

<div class="post-metadata">

**Author:** ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)\
**Post date:** [September 11, 2019, 2:05pm UTC](https://discourse.julialang.org/t/transitioning-from-ubuntu-ppa-to-official-binaries/28650/2 "2019-09-11T14:05:09Z")

</div>

It should be possible to install the official Julia binaries without interfering at all with your PPA-provided instlalation and without introducing any clutter. My process on linux is the following:

- I download the official binaries from [Download Julia](https://julialang.org/downloads/) and store them in a folder (I happen to use `~/apps`, but you can put them anywhere you want). I keep each minor Julia version in a separate folder.
- I then create a symlink in `/usr/local/bin/` with the appropriate julia version. For example, I might do:

```bash
sudo ln -s /home/rdeits/apps/julia-1.2.0/bin/julia /usr/local/bin/julia-1.2

```

Having versioned symlinks means it’s easy to run different Julia versions, (e.g. running `julia-1.2` or `julia-0.7` as needed).

- I then create one more symlink inside `/usr/local/bin`:

```bash
sudo ln -s julia-1.2 /usr/local/bin/julia

```

This means that when I run `julia` I get `julia-1.2`. I can then switch my “default” julia version just by changing that symlink.

And that’s it. Julia never needs to install anything system-wide, and all of the packages will live under separate folders inside `~/.julia`, with separate folders for each minor version of Julia. None of the files installed by the PPA version of Julia will be necessary if you use the official binaries.

You also don’t need to do anything special to transition to the new package manager – it should just work and should not overwrite any of your packages from older Julia releases.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [September 11, 2019, 2:46pm UTC](https://discourse.julialang.org/t/transitioning-from-ubuntu-ppa-to-official-binaries/28650/3 "2019-09-11T14:46:18Z")

</div>

Unless you are maintaining a multi-user machine, just download and extract the tarball it wherever you like (eg I generally keep them in various directories like `~/src/julia-1.2`), put it in the environment variable `PATH`, and you are done.

Some Linux users like to have a single directory for various scripts, eg `~/bin`, and put that in `PATH`. In that case, just make a symlink to the Julia binary from there.

Generally it makes sense to keep multiple Julia binaries around, eg for testing on an earlier version, or trying out a pre-release, just name symlinks accordingly.

These may help:

[https://askubuntu.com/questions/141718/what-is-the-path-environment-variable-and-how-do-i-add-to-it](https://askubuntu.com/questions/141718/what-is-the-path-environment-variable-and-how-do-i-add-to-it)

[https://askubuntu.com/questions/324930/question-about-the-symlink-of-the-ln-command](https://askubuntu.com/questions/324930/question-about-the-symlink-of-the-ln-command)

---

<div class="post-metadata">

**Author:** ![abelsiqueira](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/abelsiqueira/32/47269_2.png) [@abelsiqueira](https://discourse.julialang.org/u/abelsiqueira)\
**Post date:** [September 11, 2019, 6:39pm UTC](https://discourse.julialang.org/t/transitioning-from-ubuntu-ppa-to-official-binaries/28650/4 "2019-09-11T18:39:00Z")

</div>

The process described by @rdeits is essentially what we try to do in the script [https://github.com/abelsiqueira/jill](https://github.com/abelsiqueira/jill). We’d appreciate if you tried it.

---

<div class="post-metadata">

**Author:** ![Vectornaut](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vectornaut/32/10469_2.png) [@Vectornaut](https://discourse.julialang.org/u/Vectornaut)\
**Post date:** [September 25, 2019, 10:38am UTC](https://discourse.julialang.org/t/transitioning-from-ubuntu-ppa-to-official-binaries/28650/5 "2019-09-25T10:38:34Z")

</div>

Oh my gosh, this is great! The day you posted your answer, I downloaded the official 0.5, 0.7, and 1.2 binaries into their own folders, as you suggested. I could call `bin/julia` from each folder to run whichever version I wanted, and the three versions ran smoothly side by side. I verified that my old code ran as expected in 0.5, and then used the deprecation warnings in 0.7 to port everything I was working on to 1.2.

Each version comes with its own independent `Pkg` environment, as you said. I only ran into one package management subtlety: I’m developing one project in a custom environment, and that environment seems to be shared across versions. As a result, I suspect the version of each package in the custom environment might depend on which version of Julia I was running when I last updated it. Since I’ve been moving from earlier to later versions, I can’t tell whether this is actually happening, or whether it could cause a problem if I moved backward.

Now that I’m confident everything works, I’m ready to remove the PPA version of Julia, and set up versioned symlinks like you described. Thank you so much for your help! I thought transitioning to the official binaries was going to be a nightmare, but it really was just as easy as downloading a single folder and putting it somewhere. I’m eager to clean up all the scattered binaries from the PPA version, now that I know I don’t need them.

---

<div class="post-metadata">

**Author:** ![Vectornaut](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vectornaut/32/10469_2.png) [@Vectornaut](https://discourse.julialang.org/u/Vectornaut)\
**Post date:** [September 25, 2019, 11:27am UTC](https://discourse.julialang.org/t/transitioning-from-ubuntu-ppa-to-official-binaries/28650/6 "2019-09-25T11:27:46Z")

</div>

Thanks for dropping by! I came across `Jill` while I was studying how to transition to the official binaries, but I didn’t try it, for two reasons.

1. I wasn’t sure how it might interact with the PPA version of Julia. How would it deal with the fact that I already had a `julia` executable in my system path? Would it respect the directory structure of `~/.julia` set up by the old package manager?

2. I couldn’t easily figure out what it was doing. If the installation failed—and maybe even broke my existing PPA installation—I would have to trace through 150 lines of `bash` script (with 10 lines of explanatory comments) to figure out what I’d just done. I know `Jill` isn’t particularly complicated, but it has enough moving parts that I’d find them hard to keep track of, and I’m not fluent in `bash`.

Now that I know how easy it is to install the official binaries by hand (if I don’t need to have Julia in my system path, it’s literally just downloading a single folder and putting it somehwere!), I’m afraid I’m not eager to try `Jill`. When I’m working outside the Ubuntu package management system, I like to keep track of what I’m doing as well as I can, and in this case the easiest way to do that is by hand.
