Paket With Fsx Scripts FSharp

Jan 19th, 2016 - written by Kimserey with .

Paket is a dependency manager. It is useful especially when you want to develop .fsx files where the full path of the dependencies are hardcoded in your script. It makes it easier to manage dependencies compared than using Nuget because the version of the library isn’t included in the path. This post will show how to setup a new .fsx file with dependencies handled by Paket.

Initialize Paket and download libraries

Download paket.boostrapper.exe from here. Place it under \.paket and run it:

1
.paket\paket.bootstrapper.exe

It will download the latest version of paket.exe. Now run init to initialize paket for your solution:

1
.paket\paket.exe init

Your solution is now ready to get the libraries. Now to install a library run:

1
.paket\paket.exe add project TestProject nuget MathNet.Numerics.FSharp

project is used to specify a project and nuget is used to specify a nuget package to be downloaded. After running the command, you will now have MathNet.Numerics in your packages folder and you will be able to reference it from your .fsx script files.

1
2
3
4
5
6
7
8
9
10
11
#load @"..\packages\MathNet.Numerics.FSharp\"MathNet.Numerics.fsx"

open MathNet
open MathNet.Numerics.LinearAlgebra
open MathNet.Numerics.Statistics

let x = vector [ 2.0; 5.0 ]
let y = matrix [ [ 1.0; 2.0 ]
                 [ 3.0; 4.0 ] ]

let z = x * y

When I started F#, I was confused by #I, #r and #load. I also didn’t really know what to google to look for explanation. Actually the explanation are in F# interactive reference here and this is what the directives do (copy pasted from msdn):

  • #I: Specifies an assembly search path in quotation marks.
  • #load: Reads a source file, compiles it, and runs it.
  • #r: References an assembly.

In our case, MathNet.Numerics came with a MathNet.Numerics.fsx" which contains all the references needed to use the library so we just need to load that script.

If MathNet.Numerics have updates, you just need to run the update command and your packages will be updated. Your script files won’t need to be changed.

1
.paket\paket.exe update

Conclusion

It is very easy to manage dependency with Paket. And I’ve showed you how to quickly and easily add dependency when you just want to hack things in a .fsx file. There is much more that can be done with Paket, you can convert a Nuget solution to Paket, you can also reference git depedencies, git gist, even http dependencies like fssnip for example. All this can be found in the doc. Thanks for reading!

Designed, built and maintained by Kimserey Lam.