julia 的包、模块管理(julia如何导入自己编写的本地模块)

jullia中的模块导入的语句主要有两种

下面是一个模块的例子

    module MyModule

    export x, y

    x() = "x"
    y() = "y"
    p() = "p"

    end

使用module定义一个模块,module和end的区间就是一个命名空间了。

导入一个模块有两种关键字 using和import

这两个关键词的区别是,import更像我们平时那个模块。就像python的import

下面是几种导入方式差异的表格

导入代码 当前作用域导入了哪些变量? 可增加新方法的名字
using MyModule All exported names (x and y), MyModule.x, MyModule.y and MyModule.p MyModule.x, MyModule.y and MyModule.p
using MyModule: x, p x and p
import MyModule MyModule.xMyModule.yMyModule.p MyModule.xMyModule.yMyModule.p
import MyModule.x, MyModule.p xp xp
import MyModule: x, p xp xp

using相当于把模块里面的全局变量全部导入了,最终的导入是以全局变量的形式,相当于python的from xxx import *

而 import则是作为一个命名空间导入,这样你就可以mymodule.x这样来调用了,并且import是和export对应的。

另外import还有一个关键的地方是,可以你修改import导入的变量,但是你不能修改using的变量

这两个模块导入的方式,并不适用于你在本地编写代码。因为julia的包导入是到他自己的路径里去寻找模块的。

所以除非你在他指定的path里写模块,不然是不能导入的。

模块文件路径

全局变量 LOAD_PATH 包含了调用 require 时 Julia搜索模块的目录。可以用 push! 进行扩展 :

    push!(LOAD_PATH, "/Path/To/My/Module/")

将这一段代码放在 ~\.juliarc.jl 里能够在每次 Julia启动时对 LOAD_PATH 扩展。此外,还可以通过定义环境变量 JULIA_LOAD_PATH 来扩展 Julia 的模块路径。

扩展模块路径到你写的模块的位置之后,就可以使用import或者using正常导入了。

这点就有点像go语言了,早期也有类似的限制,就是代码必须放到GOPATH里面。但是后面有了go mod 用作包管理之后,只要用go mod初始化过在任何目录都能正常使用包管理了。

include

正常我们用include就差不多了

include相当于代码拼接,你导入的代码会在include的位置执行。

include("mycode.jl")

就比较简单易用了。

include可以正常使用相对路径之类的,vscode上也支持路径补全。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容