Julia package data files and absolute/relative paths

Viewed 2092

I'm creating a package in Julia and have followed the Package Development section of the Docs.

One of my functions opens and reads in a data file (mydata.txt) that I'm storing in the package directory.

Everything works pretty great when I run the Julia from the package directory but not so great when I run the tests or run Julia from a different directory because it doesn't know where to find that data file.

I thought I could just do something like:

datapath = Pkg.dir("MyPkg") * "/data/"

to get an absolute path to the file but it still doesn't seem to work.

What is the correct way to provide an absolute file path for data in a package?

3 Answers

As of Julia 1.0, the answer by Imanol Luengo will produce a warning:

Warning: Pkg.dir(pkgname, paths...) is deprecated; instead, do import PackageName; joinpath(dirname(pathof(PackageName)), "..", paths...)"

so while it still works, it will stop working in a future version. The replacement suggested in the warning message seems to work:

joinpath(dirname(pathof(MyPkg)), "..", "data")

Inside the package you don't need the import.

In Julia 1.7 and above, you can simply do:

datapath = pkgdir("MyPkg", "data")
mytxtpath = pkgdir("MyPkg", "data", "mydata.txt")
# etc. - any number of path components are allowed as further arguments

For earlier versions (from either 1.3 or 1.4 version), replace Pkg.dir in @ImanolLuengo's answer with pkgdir:
joinpath(pkgdir("MyPkg"), "data", "mydata.txt")

Related