如何在本地注册表中注册本地Julia包?

spe*_*max 12 package julia

我的主目录中有一个Julia包,名称为Foo。Foo是一个包含Project.toml文件的目录,该文件描述了程序包的依赖性,名称等。我希望能够以特殊方式使用另一个文件夹中的程序包,如下所示。

  1. 制作包装 Foo
  2. Foo在本地Julia库中注册
  3. Pkg.add("Foo")从系统上的任何位置运行,例如script.jl,它将具有以下内容:
using Pkg
Pkg.add("Foo")
using Foo

# Now use Foo
Foo.bar()
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我尝试过的。

  • 导航到Baz我要运行的目录Baz/script.jl
  • 使用repl,点击]并运行dev --local PATH_TO_FOO
  • repl开始using Foo
  • Foo现在可以在当前repl会话(或脚本)中访问
  • 简介:我已经设法将软件包导入Foo另一个目录Baz

基本上,我希望能够编写一个script.jl可以使用本地注册表而不是此dev --local .方法的文件。

Dav*_*ela 6

我假设这是供个人使用,您不是大型团体的系统管理员。

维护注册表是一项艰苦的工作。我将尽可能避免创建注册表。如果您的目标是减少使用脚本的痛苦,则可以使用更轻松的解决方案:共享环境。

一个共享的环境,是一个普通的环境下,在规范位置创建。这意味着Pkg将可以按名称查找它:您不必指定显式路径。

设置共享环境:

  • 给它起个名字: Pkg.activate("ScriptEnvironment"; shared=true)
  • 填充它:(Pkg.add(Pkg.PackageSpec(; path="/path/to/Foo"))根据您的用例,您还可以使用Pkg.develop,添加注册的软件包等)
  • 就这样!

现在,您所有的脚本都可以使用共享环境:

using Pkg
Pkg.activate("ScriptEnvironment"; shared=true)
using Foo
Run Code Online (Sandbox Code Playgroud)

如果其他脚本集需要不同的软件包集,请使用不同的共享名重复该过程。Pkg环境确实很便宜,因此可以随意使用此方法。


注意:我不建议使用开头的脚本,Pkg.add("Foo")因为这样做会冒着无意中污染活动环境的风险。

  • 真好 加上答案? (2认同)