编辑源代码(并重新编译?)julia包

时间:2017-10-20 01:11:50

标签: open-source julia

我想编辑特定Julia包的源代码。为了使其具体化,假设我想在Distributions.jl包中添加新的发行版。但是,我很难找到Julia源代码的位置(并想象一旦我找到它,我可能需要重建/重新编译Julia?)。我添加了Pkg.add("Distributions.jl")包,但在我的计算机上找不到它(MacOS)。

例如,如果我想编辑Python的numpy包中的函数(使用Anaconda),我将导航到/Users/MYUSER/anaconda/lib/python2.7/site-packages/numpy并在那里编辑源代码。我如何在Julia中执行此操作,尤其是Distributions.jl包?你能指点新手参考吗?

4 个答案:

答案 0 :(得分:4)

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

您可以直接编辑文件并使用Juno的内联评估执行它,并在模块内部对其进行更新,因此不需要重新启动。 Here's a video I made awhile back on Julia package development

答案 1 :(得分:4)

如果您想编辑特定方法,那么您也可以使用@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,notepad,......):

julia> ENV["JULIA_EDITOR"] = "vim";

你可以在〜/ .juliarc.jl中执行此操作(或者通过.bashrc中的export JULIA_EDITOR=vim或shell允许的内容)。

您可以看到支持哪些编辑器(警告:您必须分析源代码!):

julia> @edit edit("")

或者可能会支持哪些https://github.com/JuliaLang/julia/blob/master/base/interactiveutil.jl

修改

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

答案 2 :(得分:2)

上面的一些答案已经过时/部分/对我不起作用,所以我想我会 给我两美分,因为我最近有这个确切的需求(使用 Julia 1.5.3)。

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

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

julia> pathof(HTTP)
"C:\\Users\\User\\.julia\\packages\\HTTP\\IAI92\\src\\HTTP.jl"

要编辑模块的代码,您可以使用 REPL,例如:

julia> edit(HTTP)

将在 HTTP 模块的源代码中打开您的编辑器。

或者,在使用 VSCode 时,您可以右键单击函数调用并使用转到定义 (F12) 上下文菜单选项并打开您的代码中的源代码编辑器(Atom 有一个等效的Go to Declaration 选项,但它对我不起作用)。

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

pkg> develop --local Example

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

pkg> free Example

有关详细信息,请参阅 Julia Pkg module documentation

请记住(如上述答案中所述)Julia 仅在启动时预编译模块,因此除非您使用 Revise.jl 上面的 Liso,否则每次更改到模块的代码需要重新启动 Julia 以重新编译更改的模块。 这可以通过键入

来完成
julia> exit()

并再次运行 using <Module Name> 语句。

编辑:这个问题与以下内容密切相关: How to find the path of a package in Julia

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

答案 3 :(得分:1)

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