关于 Atom Juno 工程文件的路径问题

假如我有两个工程文件 proj1 和 proj2,以及在 proj2 中有一些 jl 和 dat 文件,文件具体放置的路径如下

/home/myJulia/proj1/
/home/myJulia/proj2/A/ main.jl
/home/myJulia/proj2/B/ b1.jl
/home/myJulia/proj2/C/ c1.dat

在 Juno 中我分别 Add Project Folder – proj1 proj2,注意这时的顺序是 proj1 在 proj2 上面:
Selection_041

我想在 proj2 的 main.jl 添加路径

push!(LOAD_PATH,"../")

目的想把整个 proj2 的目录都添加进去,但是,为什么在此时 Juno 下打开 main.jl,Juno 的 REPL 中用 pwd() 输出的却是 proj1 的目录?

julia> pwd()
"/home/myJulia/proj1"

也就是我想问,在 Juno 下如何将默认的路径更改为当前的工作路径?

pwd 是当前工作目录,如果没有使用 cd 等操作来改动这个系统状态,它是不会更改的。 你想要的好像是当前文件/文件夹的相对路径,在 Julia 中可以使用 @__DIR__dirname(@__FILE__)

# 在 main.jl 中 include b1.jl
include(joinpath(@__DIR__, "..", "..", "proj2", "B", "b1.jl"))

当前工作目录是一个随时可以改变的状态,为了尽量让代码与系统状态[1]解耦合,建议使用上述方法。另外,push!(LOAD_PATH) 在现有的包管理机制下应该可以避免,看起来像是在滥用。

[1]: 这里说的系统状态不包括代码的文件结构,举个例子,git 等 SCM 工具可以记录文件结构,但不会记录 pwd

好的。
只是 Juno 的当前工作目录默认就是第一个 project 的目录,比如 Add Project Folder 的顺序是 proj5, proj2, proj1,那么不论我目前在哪个文件夹下面, pwd() 的结果都会是 proj5 的目录, 这个可以更改一下 Juno 的默认路径吗?

那期待的行为是什么呢? 每新加一个文件夹,pwd 自动更新? 如果删除了最新的文件夹,那么 pwd 是否也要自动更新?到第二新的目录下或者其它规则,但这种复杂的变换规则真的有意义(更方便)吗?手动显式切换只需要用 cd() + joinpath(@__DIR__, ...),省去了记隐式规则的麻烦。

好的 :grin: