我想编辑特定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
包?你能指点新手参考吗?
答案 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/
找到了源代码。这是一个隐藏的文件夹,我原本没有看到......