Julia中项目根目录的绝对路径

Julia中项目根目录的绝对路径,julia,Julia,可以使用以下代码访问位于project\u root/lib/code.jl中的文件的项目根目录: root = dirname(dirname(@__FILE__)) root = File.expand_path('../', File.dirname(__FILE__)) 使用dirname()两次似乎很难看。有更好的方法吗?对于Ruby,我将使用以下代码: root = dirname(dirname(@__FILE__)) root = File.expand_path('../

可以使用以下代码访问位于
project\u root/lib/code.jl
中的文件的项目根目录:

root = dirname(dirname(@__FILE__))
root = File.expand_path('../', File.dirname(__FILE__))
使用
dirname()
两次似乎很难看。有更好的方法吗?对于Ruby,我将使用以下代码:

root = dirname(dirname(@__FILE__))
root = File.expand_path('../', File.dirname(__FILE__))

感谢您让我了解:

"/"*relpath((@__FILE__)*"/../..","/")
根据
?relpath
,它给出了从文件系统中第二个参数的位置到第一个参数的路径。这比双
dirname
解决方案好吗

相同精度的一个变体是:

normpath(joinpath(@__FILE__,"..",".."))
最接近Ruby的等价物可能是:

realpath(dirname(@__FILE__)*"/..")
我只是用

const PROJECT_ROOT = @__DIR__
从我的
\u init.jl
文件中,该文件位于项目根目录中(在
src
目录旁边),并为您提供规范路径

当从该目录中打开Julia会话时,我会自动执行我的
\u init.jl
文件,方法是

isfile("_init.jl") && include(joinpath(pwd(), "_init.jl"))
在我的
~/.julia/config/startup.jl
文件中。如果您从别处开始,则必须手动
包括(“\u init.jl”)
它(或相应的相对路径)。

我喜欢使用

module Foo

const PROJECT_ROOT = pkgdir(Foo)

end # module
其中,
PROJECT\u ROOT
的定义也可以替换为

const PROJECT_ROOT = dirname(dirname(pathof(Foo)))
或者,你可以使用

const PROJECT_ROOT = pkdir(@__MODULE__)

要使其与操作系统无关,它必须是
Base.path\u separator*relpath(@\uu FILE\uu*“/../…”,Base.path\u separator)
。呃。
normpath
版本在我看来是最稳定/最干净的。我无法得到第一个解决方案
“/”*relpath(@\uuuuuu文件“/../…”,“/”
)。其他解决方案工作得很好:)奇怪,似乎是一个解析问题。用括号括住
@\uuuuuuuuuu文件
可以解决这个问题<代码>重新路径((@uuuu文件)*“/....”,“/”)