问题 julia:创建并使用没有Internet的本地包


我正在尝试创建一个julia语言包并在项目中使用它。
现在我只有一个jl文件,我不知道如何用它创建一个包。

我读过这个 链接 但我还是不知道怎么做。我想创建一个带有jl文件的本地包,并使用以下代码在我自己的本地项目中使用它: using MyPackage

有人能帮帮我吗?


2003
2018-03-23 13:35


起源



答案:


你应该把文件放进去

〜/ .julia / v0.X / MyPackage的/ SRC / MyPackage.jl

其中〜是您的主目录,X是您正在使用的Julia的版本号。 X将是3,除非你是Julia的开发或夜间版本,在这种情况下它将是4。

另请注意,要使其工作,文件MyPackage.jl应定义模块MyPackage,并在使用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

在第一种情况下,我没有 export任何东西。因此,在打电话时 using MyPackage 只有模块 MyPackage 本身将为用户提供。如果我想使用 test 功能,我将不得不使用完全限定的名称: MyPackage.test()

在第二种情况下,我选择导出该功能 test。这发生在线上 export test。现在我打电话的时候 using MyPackage,这两个模块 MyPackage 和功能 test 可供用户使用。我不需要使用完全限定的名称来访问 test 了: test() 将工作。


10
2018-03-23 13:52



我试过这样的:Pkg.generate(“MyPackage”,“MIT”);在此之后我发现路径〜/ .julia / v0.3 / MyPackage中有一个目录名MyPackage,在这个目录中有一个目录名src。在这里,我找到了一个名为MyPackage.jl的文件。所以我编辑这个文件并保存。但是,我仍然无法使用它。 - Yves
我键入了这个:Pkg.status(),我发现MyPackage是“0.0.0- master(未注册,脏)” - Yves
在新的Julia会话中,您使用MyPackage执行会发生什么? - spencerlyon2
是。我完成了创建,现在我想通过“使用MyPackage”来使用它。我认为问题是MyPackage很脏。 - Yves
不,脏意味着您已经未提交(在git意义上)包目录(存储库)中的更改。这不是问题。使用MyPackage运行时是否出现错误,或者您的功能是否无法使用。如果是后者,我怀疑你忘了从MyPackage.jl里面的模块中导出 - spencerlyon2


答案:


你应该把文件放进去

〜/ .julia / v0.X / MyPackage的/ SRC / MyPackage.jl

其中〜是您的主目录,X是您正在使用的Julia的版本号。 X将是3,除非你是Julia的开发或夜间版本,在这种情况下它将是4。

另请注意,要使其工作,文件MyPackage.jl应定义模块MyPackage,并在使用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

在第一种情况下,我没有 export任何东西。因此,在打电话时 using MyPackage 只有模块 MyPackage 本身将为用户提供。如果我想使用 test 功能,我将不得不使用完全限定的名称: MyPackage.test()

在第二种情况下,我选择导出该功能 test。这发生在线上 export test。现在我打电话的时候 using MyPackage,这两个模块 MyPackage 和功能 test 可供用户使用。我不需要使用完全限定的名称来访问 test 了: test() 将工作。


10
2018-03-23 13:52



我试过这样的:Pkg.generate(“MyPackage”,“MIT”);在此之后我发现路径〜/ .julia / v0.3 / MyPackage中有一个目录名MyPackage,在这个目录中有一个目录名src。在这里,我找到了一个名为MyPackage.jl的文件。所以我编辑这个文件并保存。但是,我仍然无法使用它。 - Yves
我键入了这个:Pkg.status(),我发现MyPackage是“0.0.0- master(未注册,脏)” - Yves
在新的Julia会话中,您使用MyPackage执行会发生什么? - spencerlyon2
是。我完成了创建,现在我想通过“使用MyPackage”来使用它。我认为问题是MyPackage很脏。 - Yves
不,脏意味着您已经未提交(在git意义上)包目录(存储库)中的更改。这不是问题。使用MyPackage运行时是否出现错误,或者您的功能是否无法使用。如果是后者,我怀疑你忘了从MyPackage.jl里面的模块中导出 - spencerlyon2