# \[ANN\] jill.py -- a simple and stupid cross-platform Julia installer

**URL:** https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845
**Category:** Package Announcements
**Tags:** announcement
**Created:** [February 19, 2020, 12:17pm UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845 "2020-02-19T12:17:34Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![JohnnyChen94](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johnnychen94/32/29979_2.png) [@JohnnyChen94](https://discourse.julialang.org/u/JohnnyChen94)
#### Post date: [February 19, 2020, 12:17pm UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/1 "2020-02-19T12:17:34Z")

</div>

The python fork [jill.py](https://github.com/johnnychen94/jill.py) is a cross-platform Julia installer that provides more functionalities than the [original bash script](https://github.com/abelsiqueira/jill) made by @abelsiqueira :

- download the _latest_ Julia release from the _nearest_ mirror server
- keep the same simple and stupid Julia installation experience across all platforms

As long as you have python \>= 3.6 installed LOL, you can install jill using `pip install jill`

And then use some commands that I like the most:

- `jill install`: install the latest stable Julia version (Currently it’s `1.3.1` and not `1.4.0-rc1`)
- `jill install 1.0`: install the _latest_ stable `1.0.z` Julia version (Currently it’s `1.0.5`)
- `jill install 1.4.0-rc1 --upgrade`: install `1.4.0-rc1` and copy the root environment from an older Julia version.
- `jill install --upstream Official`: only download from the official julialang-s3 buckets
- cron + `sudo jill install nightly --confirm`: always keep an updated nightly version system-widely

Although not documented well, one advanced usage of `jill` I love so much is to deploy CI by targeting download upstream to your private release mirror, where external network traffic is usually limited. (For me it simply because network connection to aws s3 from China really sucks)

Also for who wants to use it in a CI environment: you’re always guaranteed to get an updated release version as soon as there’s a new Julia release.

A brief demo:

 ![Screen Shot 2020-02-20 at 10.38.40 AM](https://global.discourse-cdn.com/julialang/original/3X/3/5/3519709ed2f2fd88413f6feed134751d0b333e8b.png)

A great help comes from @staticfloat when I tried to add Windows support, all credits goes to him and bugs are my own.

---

<div class="post-metadata">

### Author: ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)
#### Post date: [February 19, 2020, 12:29pm UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/2 "2020-02-19T12:29:15Z")

</div>

Nice!  
I am using Ubuntu 18.04.  
Where does your script modify the PATH variable?  
Couldn’t find any change to .bashrc

---

<div class="post-metadata">

### Author: ![JohnnyChen94](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johnnychen94/32/29979_2.png) [@JohnnyChen94](https://discourse.julialang.org/u/JohnnyChen94)
#### Post date: [February 19, 2020, 12:36pm UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/3 "2020-02-19T12:36:36Z")

</div>

> Where does your script modify the PATH variable?  
> Couldn’t find any change to .bashrc

It’s supposed to be `~/.bashrc` if you’re non-root user and if `~/.local/bin` not in PATH.

```plaintext
# a snapshot of the install log
add /home/test/.local/bin to PATH
~/.bashrc will be modified, if you're not using BASH, then you'll need manually add /home/test/.local/bin to your PATH

/home/test/.bashrc is modified
you need to restart your current shell to update PATH

```

---

<div class="post-metadata">

### Author: ![tbeason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tbeason/32/15898_2.png) [@tbeason](https://discourse.julialang.org/u/tbeason)
#### Post date: [February 19, 2020, 12:45pm UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/4 "2020-02-19T12:45:18Z")

</div>

Looks great!

---

<div class="post-metadata">

### Author: ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)
#### Post date: [December 31, 2020, 2:56pm UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/5 "2020-12-31T14:56:23Z")

</div>

@tkf could this be integrated into pyjulia?

---

<div class="post-metadata">

### Author: ![StatisticalMouse](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/statisticalmouse/32/43370_2.png) [@StatisticalMouse](https://discourse.julialang.org/u/StatisticalMouse)
#### Post date: [October 17, 2021, 11:23am UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/6 "2021-10-17T11:23:14Z")

</div>

@JohnnyChen94 I started using this, and it seems to work fine!

I’ve two questions. What are the correct procedures to update a Julia version, and to delete a Julia version?

---

<div class="post-metadata">

### Author: ![JohnnyChen94](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johnnychen94/32/29979_2.png) [@JohnnyChen94](https://discourse.julialang.org/u/JohnnyChen94)
#### Post date: [October 17, 2021, 2:26pm UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/7 "2021-10-17T14:26:47Z")

</div>

If you mean updating Julia’s minor version, say, `jill install 1.7.0-rc1`, then you probably would want to `cp -r ~/.julia/environments/v1.6 ~/.julia/environments/v1.7` (if you’re using macOS or Linux) so that the package information is still kept in the new version’s root environment `@v1.7`. Actually, `jill install 1.7.0-rc1 --update` also does this but I find manually copying the folder via `cp` is more convenient so I choose to not advertise this feature in the README.

Deleting Julia via `jill` is a missing feature: currently, you’ll have to manually remove the Julia installation folders and also the symlinks, see also the discussions in [https://github.com/johnnychen94/jill.py/issues/96](https://github.com/johnnychen94/jill.py/issues/96).

---

<div class="post-metadata">

### Author: ![StatisticalMouse](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/statisticalmouse/32/43370_2.png) [@StatisticalMouse](https://discourse.julialang.org/u/StatisticalMouse)
#### Post date: [October 17, 2021, 6:04pm UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/8 "2021-10-17T18:04:27Z")

</div>

Close, but not quite… By updating I meant that it’d update from 1.6.3 to 1.6.4 for instance. Well, I guess the default version would also need to update from 1.6 to 1.7 when it’s released. I don’t care about the version specific files, and changing from 1.6 to 1.7 would probably be a good time for me to clean up with `rm -rf ~/.Julia/`.

Ah, ok, I can delete some versions manually.

---

<div class="post-metadata">

### Author: ![junelac](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/junelac/32/29728_2.png) [@junelac](https://discourse.julialang.org/u/junelac)
#### Post date: [October 18, 2021, 7:55am UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/9 "2021-10-18T07:55:27Z")

</div>

Nice! I’ve seen also the project juliaup which I think works also on this question

---

<div class="post-metadata">

### Author: ![JohnnyChen94](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johnnychen94/32/29979_2.png) [@JohnnyChen94](https://discourse.julialang.org/u/JohnnyChen94)
#### Post date: [October 18, 2021, 4:25pm UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/10 "2021-10-18T16:25:32Z")

</div>

> [@StatisticalMouse](#):
>
> By updating I meant that it’d update from 1.6.3 to 1.6.4 for instance.

For this then it’s just `jill install --confirm` and done. `jill` doesn’t distinguish between patch versions.

---

<div class="post-metadata">

### Author: ![jjiw](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jjiw/32/29944_2.png) [@jjiw](https://discourse.julialang.org/u/jjiw)
#### Post date: [April 23, 2022, 3:35am UTC](https://discourse.julialang.org/t/ann-jill-py-a-simple-and-stupid-cross-platform-julia-installer/34845/11 "2022-04-23T03:35:49Z")

</div>

On linux with bash shell, because bash caches paths to executables, a command like `hash -d julia` is needed to access the newly installed version. (Doesn’t apply if current shell hasn’t yet ref’d julia, or if you start a new shell, etc.). Eg:

```julia
> julia --version
julia version 1.7.0-rc2
> jill install
   ...(jill installs 1.7.2)...
> julia --version
julia version 1.7.0-rc2
> hash -d julia
> julia --version
julia version 1.7.2
```
