Julia: 如何在没有互联网的情况下创建并使用本地包

17

我试图创建一个julia语言的包并将其用于项目中。
目前我只有一个jl文件,我不知道如何使用它创建包。

我已经阅读了这篇文章,但我仍然不知道如何操作。我想创建一个本地包,其中包含一个jl文件,并在我的本地项目中使用以下代码:using MyPackage

有人可以帮助我吗?

1个回答

13

你应该将文件放在

~/.julia/v0.X/MyPackage/src/MyPackage.jl

这里, ~ 是你的主目录,X 是你所使用的 Julia 版本号。除非你使用的是 Julia 的开发版或夜间版,否则 X 将为 3。

还要注意,为了使其工作,文件 MyPackage.jl 应定义模块 MyPackage,并导出你想在调用 using MyPackage 后可用的定义。

要自动创建此结构,可以调用 Pkg.generate("MyPackage", "MIT"),其中 MIT 可以替换为另一种受支持的默认许可证。这将在正确的位置创建文件夹并设置模块结构,然后只需将代码合并到该结构中即可。


编辑

这是文件 ~/.julia/v0.3/MyPackage/src/MyPackage.jl 可能包含的两个示例内容:

module MyPackage

function test()
    1
end

end  # module

module MyPackage

export test

function test()
    1
end

end  # module

在第一种情况下,我没有导出任何内容。因此,在调用using MyPackage时,只有模块MyPackage本身会对用户可用。如果我想使用test函数,我必须使用完全限定名称:MyPackage.test()

在第二种情况下,我选择导出test函数。这发生在export test行上。现在当我调用using MyPackage时,模块MyPackage和函数test都对用户可用。我不需要再使用完全限定名称来访问testtest()就可以了。


我输入了这个命令:Pkg.status(),然后发现我的包是“0.0.0-master(未注册,脏)”。 - Yves
当在一个全新的Julia会话中执行using MyPackage时,会发生什么? - spencerlyon2
1
不,"dirty" 意味着你在包目录(仓库)中有未提交的更改(在 git 方面)。这不是问题。当你使用 MyPackage 运行时是否出现错误,或者你的函数只是没有被提供?如果是后者,我怀疑你已经忘记从 MyPackage.jl 内部模块中导出它们了。 - spencerlyon2
事实上,我是一名C++程序员。我的同事使用Julia语言。现在我正在尝试将Julia嵌入到我的C++项目中。因此,我只是尝试一个非常简单的包来确保我可以嵌入我的同事的Julia包。所以在MyPackage.jl中,我只编写了一个像这样的函数:function test() return 1 end - Yves
太好了。享受Julia吧! - spencerlyon2
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接