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

标签 package julia

我的主目录中有一个名为 Foo 的 Julia 包. Foo 是一个带有 Project.toml 的目录描述包依赖关系、名称等的文件。我希望能够以如下特定方式从另一个文件夹中使用这个包。

  • 构建包Foo
  • 注册 Foo在本地 Julia 存储库中
  • 运行Pkg.add("Foo")来自系统上的任何位置,例如 script.jl,它将具有以下内容:
  • using Pkg
    Pkg.add("Foo")
    using Foo
    
    # Now use Foo
    Foo.bar()
    

    这是我到目前为止所尝试的。
  • 导航到 Baz我要运行的目录Baz/script.jl
  • 使用repl ,点击]并运行 dev --local PATH_TO_FOO
  • 来自 repl , 运行 using Foo
  • Foo现在可以在当前 repl 中访问 session (或脚本)
  • 摘要:我已经成功导入了一个包Foo在另一个目录Baz .

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

    最佳答案

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

    维护注册表是一项艰巨的工作。如果可能的话,我会避免创建注册表。如果您的目标是减少使用脚本的痛苦,那么存在一个更轻松的解决方案:共享环境。

    一个 共享环境 是在规范位置创建的常规环境。这意味着 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
    

    如果其他脚本集需要不同的包集,请使用不同的共享名称重复该过程。 Pkg环境真的很便宜,所以随意自由地使用这种方法。

    注意:我不鼓励以 Pkg.add("Foo") 开头的脚本。因为这会带来无意中污染事件环境的风险。

    关于package - 如何在本地注册表中注册本地 Julia 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57965361/

    相关文章:

    java - 将多个类移动到另一个包并在每个文件中重新配置该包

    package - LISP cond 应答无包

    multithreading - 如何在 Julia 1.0 中使用多线程?

    module - `using` 内部模块及其符号,位于模块的嵌套结构中

    python - 用编译的 Julia 打包 Python?

    python - 尝试安装 scipy 时出错

    haskell - 如何使用 Stack 安装/使用本地版本的包?

    lisp - 如何在lisp中找到一个类的包?

    julia - 在 Julia 中,是否有一种好方法可以维护针对不同版本的包的多个版本?

    julia - 在 Julia 中将带有 bactrace 的异常转换为字符串