Open source 编辑源代码(并重新编译?)

Open source 编辑源代码(并重新编译?),open-source,julia,Open Source,Julia,我想把源代码编辑成一个特定的Julia包。为了使其具体化,假设我想向包中添加一个新的发行版。然而,我很难找到Julia源代码的位置(想象一下,一旦找到它,我可能需要重新编译Julia?)。我添加了带有Pkg.add(“Distributions.jl”)的软件包,但在我的计算机(MacOS)上找不到它 例如,如果我想在Python的numpy包中编辑一个函数,(使用Anaconda),我会导航到/Users/MYUSER/Anaconda/lib/python2.7/site packages/

我想把源代码编辑成一个特定的Julia包。为了使其具体化,假设我想向包中添加一个新的发行版。然而,我很难找到Julia源代码的位置(想象一下,一旦找到它,我可能需要重新编译Julia?)。我添加了带有
Pkg.add(“Distributions.jl”)
的软件包,但在我的计算机(MacOS)上找不到它


例如,如果我想在Python的
numpy
包中编辑一个函数,(使用Anaconda),我会导航到
/Users/MYUSER/Anaconda/lib/python2.7/site packages/numpy
,并在那里编辑源代码。如何在Julia中实现这一点,特别是对于
发行版.jl
包?你能给新手指出一些参考资料吗?

我在
/Users/MYUSER/.julia/v0.6/Distributions/src/
找到了源代码。这是一个我原来没有看到的隐藏文件夹

Pkg.dir("Distributions")
#Returns "C:\\Users\\Chris\\.julia\\v0.6\\Distributions"

您可以直接编辑文件并使用Juno的内联计算执行它,这将在模块内部更新它,因此不需要像这样重新启动

如果要编辑特定的方法,还可以使用@edit宏:

julia> @edit Distributions.Levy()
若您使用支持的编辑器,那个么您将在定义方法的地方找到它。在vim的状态栏中,我可以看到
“~/.julia/v0.6/Distributions/src/univariate/continuous/levy.jl”102L,2751C
(因此我版本中的定义从levy.jl文件的第102行开始)

您可以通过以下方式设置支持的编辑器(例如atom、sublime、kate、gedit、emacs、记事本等):

julia> ENV["JULIA_EDITOR"] = "vim";
您可以在~/.juliarc.jl中执行此操作(或者通过.bashrc中的导出JULIA_EDITOR=vim或shell允许的方式)

您可以使用哪些编辑器(警告:您必须分析源代码!):

或者哪一个可能会得到支持

编辑:


广告重新编译:我没有测试它,但似乎非常有用!

上面的一些答案已经过时/不完整/对我不起作用,所以我想我应该 在这里给我两分钱,因为我最近有这个确切的需要(使用Julia 1.5.3)

首先,不幸的是,
Pkg.dir()
已被弃用,并在使用时收到警告

要查找模块/包代码所在的路径,可以使用
Base.pathf(::module)
函数,例如:

julia> pathof(HTTP)
"C:\\Users\\User\\.julia\\packages\\HTTP\\IAI92\\src\\HTTP.jl"
julia> edit(HTTP)
要编辑模块代码,可以使用REPL,例如:

julia> pathof(HTTP)
"C:\\Users\\User\\.julia\\packages\\HTTP\\IAI92\\src\\HTTP.jl"
julia> edit(HTTP)
将在HTTP模块的源代码处打开编辑器

或者,当使用VSCode时,您可以右键单击函数调用并使用Go to Definition(F12)上下文菜单选项,然后在编辑器中打开源代码(Atom有一个等效的Go to Declaration选项,但它不适用于我)

请注意,您可以使用快速脏方法,只需在找到代码的地方编辑代码,或者使用Julia Pkg模块提供的更干净的方法:

pkg> develop --local Example
这将在当前项目根目录下创建示例包的git克隆,以便您可以在开发环境中处理包代码的单独本地副本。 要停止使用dev模块,请使用:

pkg> free Example
有关更多信息,请参阅

请记住(正如上面的答案中所述),Julia仅在启动时预编译模块,因此除非您使用上面所指出的方法,否则对模块代码的每次更改都需要重新启动Julia才能重新编译更改的模块。 这可以通过键入

julia> exit()
并再次使用语句运行

编辑:这个问题与:


编辑:VSCode的Julia扩展有一个加载Revise.jl的选项启动Julia REPL时,此选项的默认值为true。

您在什么操作系统上?@ColinTBowers:edited,thanksYep,在Linux上是一样的。不确定它在Windows上的位置……关于重建和重新编译:如果包是预编译的,您需要重新启动会话(但其他所有操作都将自动进行)。如果包未预编译,则理论上您应该可以使用
工作区
。有关更多详细信息,请参阅…(注意:我个人倾向于重新启动会话,而不是使用
工作区