Julia

Packages in Julia

Being a homoiconic language, packages assume a particularly simple form in Julia. Similarly, the toolchain follows suit by being simple to the point of being almost invisible. Most languages have a plethora of tooling dedicated to package management, Julia currently just has Pkg, but it gets the job done, and makes it easy too.

Pkg

First things first, installation. Well, if you installed Julia, you already have Pkg installed and set-up!

Python has pip, which is quite separate from python. Julia has Pkg, which, although technically distinct from Julia, doesn’t much distinguish itself, you can just as easily leverage it in a script as you can in the REPL.

Being a modern, forward-thinking language, Julia allows you to install packages from inside the REPL without having to do the sys.path voodoo that Python for example requires. Once inside the Julia REPL, you simple press ] key, and voila, you can now install packages from wherever.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d724dcba-63a6-44cf-b79f-902cf021df20/Untitled.png

Just need to press a key

When you want to exit, you can either do the usual <Ctrl> + C, or, just hit backspace!

Bonus Tip: if instead of ], you press ?, you can get into help mode and query documentation.

Installing and importing inside a script

If you’re working with Julia on Jupyter, or just writing a script in general, then you’d add a package as follows:

using Pkg
Pkg.add("foobar")

The first statement imports Pkg itself. The second line then uses it to install the (imaginary) package foobar. Finally, you actually import the package:

using foobar

And you can do all the above in the Julia REPL as well (on the other hand, in a typical python scenario, you’d have to exit the session to do a pip install foobar). Also, note that Julia treats " and '

differently, so if you were to do 'foobar' above, you would run into problems.

Installing and importing in a REPL session

As we mentioned, Julia’s REPL features a dedicated mode for package management accessed via [. So, to do what we did above, you’d do the following (even though its not necessary, as the above will work perfectly fine):

First hop into Pkg mode and install foobar

(@v1.5) pkg> add foobar

Now go back to normal mode and import the package

julia> using foobar

This saves you a few keystrokes, but more importantly, keeps your REPL history neat and clean. Now, one might be asking doesn’t Julia automatically import a package that’s installed. Well, the reason is performance, on using your first package, you’ll see a message like Precompiling Pluto [c3e4b0f8-55cb-11ea-2926-15256bba5781], which tells you that you’re losing a bit of your memory and/or disk space to save your CPU and/or GPU time and energy.

Installing Packages from git

The more observant reader would’ve noticed that the earlier screenshot had a github repo’s ssh link (You would’ve also noted that the terminal is running JuliaPro, but that’s besides the point). And that’s not a mistake, installing a package from a git repo is as easy as putting it’s link in front of add and you can use either the usual HTTPS or SSH link. Pkg will handle everything else.

Updating and pinning

You can update packages using up, in REPL you would:

(@v1.5) pkg> up foobar

Similarly in a script

using Pkg
Pkg.up("foobar")

But sometimes, you want to stay at a specific version due to compatibility concerns. This is achieved by pin(comparable to pip freeze):

(@v1.5) pkg> pin foobar

Removing Packages

Finally, removing packages is done via rm, in REPL you would do:

(@v1.5) pkg> rm foobar

While in a script, you would leverage Pkg:

using Pkg
Pkg.rm("foobar")

Bonus: Preview

Now for the dessert, we have preview, you can use this command to try any of the above mentioned commands without changing the state of your project. Example usage:

(@v1.5) pkg> preview add foobar
(@v1.5) pkg> preview up foobar
(@v1.5) pkg> preview rm foobar

As homework, try to figure out how to use preview in a script.(Hint: look at the other commands).

References

  1. Pkg Documentation

Leave a Reply

Your email address will not be published. Required fields are marked *