如何在 julia-1.6.2 上安装包 MbedTLS?

Posted

技术标签:

【中文标题】如何在 julia-1.6.2 上安装包 MbedTLS?【英文标题】:How to install package MbedTLS on julia-1.6.2? 【发布时间】:2022-01-21 12:38:54 【问题描述】:

我解压并复制到 julia-1.6.2 到 /opt/julia/

[root@srvr0 ~]# cp -a /root/Downloads/julia-1.6.2 /opt/julia/

/etc/profile.d/julia.sh 的内容:

export JULIA_HOME=/opt/julia/julia-1.6.2
export JULIA_LOAD_PATH=/opt/julia/julia-1.6.2/share/julia/stdlib/v1.6
export JULIA_DEPOT_PATH=/opt/julia/julia-1.6.2/share/julia/stdlib/v1.6
export JULIA_PKG_DEVDIR=/opt/julia/julia-1.6.2/share/julia/stdlib/v1.6
export JULIA_PROJECT=/opt/julia/julia-1.6.2/share/julia/stdlib/v1.6
export JULIA_HISTORY=/opt/julia/julia-1.6.2/share/julia/stdlib/v1.6/logs/repl_history.jl

设置环境变量:

[root@srvr0 ~]# source /etc/profile.d/julia.sh

调用朱莉娅:

[root@srvr0 ~]# julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.6.2 (2021-07-14)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

版本信息:

julia> versioninfo()
Julia Version 1.6.2
Commit 1b93d53fc4 (2021-07-14 15:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i7 CPU       M 620  @ 2.67GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-11.0.1 (ORCJIT, westmere)
Environment:
  JULIA_DEPOT_PATH = /opt/julia/julia-1.6.2/share/julia/stdlib/v1.6
  JULIA_PROJECT = /opt/julia/julia-1.6.2/share/julia/stdlib/v1.6
  JULIA_LOAD_PATH = /opt/julia/julia-1.6.2/share/julia/stdlib/v1.6
  JULIA_PKG_DEVDIR = /opt/julia/julia-1.6.2/share/julia/stdlib/v1.6
  JULIA_HOME = /opt/julia/julia-1.6.2
  JULIA_HISTORY = /opt/julia/julia-1.6.2/share/julia/stdlib/v1.6/logs/repl_history.jl

julia> import Pkg

julia> using Pkg

添加包 MbedTLS 但出现错误:

(v1.6) pkg> add MbedTLS
  Installing known registries into `@stdlib/v1.6`
       Added registry `General` to `/opt/julia/julia-1.6.2/share/julia/stdlib/v1.6/registries/General`
   Resolving package versions...
   Installed MbedTLS ─ v1.0.3
    Updating `@stdlib/Project.toml`
  [739be429] + MbedTLS v1.0.3
    Updating `@stdlib/Manifest.toml`
  [739be429] + MbedTLS v1.0.3
  [56f22d72] + Artifacts
  [ade2ca70] + Dates
  [8f399da3] + Libdl
  [de0858da] + Printf
  [9a3f8284] + Random
  [9e88b42a] + Serialization
  [6462fe0b] + Sockets
  [4ec0a83e] + Unicode
  [c8ffd9c3] + MbedTLS_jll
Precompiling project...
  ✗ MbedTLS
  0 dependencies successfully precompiled in 13 seconds
  2 dependencies errored. To see a full report either run `import Pkg; Pkg.precompile()` or load the packages

julia> using Pkg
ERROR: ArgumentError: Package Pkg not found in current path:
- Run `import Pkg; Pkg.add("Pkg")` to install the Pkg package.

Stacktrace:
 [1] require(into::Module, mod::Symbol)
   @ Base ./loading.jl:893

观察:在添加包 MbedTLS 之前,包 Pkg 在路径上,但在调用 add MbedTLS 后,我收到错误包 Pkg 在当前路径中找不到

请指导我安装 MbedTLS 包!

【问题讨论】:

为什么是 1.6.2?当前版本是 1.7.0,1.6 系列的最后一个版本是 1.6.4(1.6.5 和 1.7.1 即将发布) 可能升级并不容易(例如,由于某些公司规定等)。 【参考方案1】:

我不喜欢你的JULIA_DEPOT_PATH,它应该是一个与你的 Julia 安装文件分开的文件夹。这很可能会以某种方式导致您的安装损坏。 此外,这意味着任何包操作很可能需要root 权限,因为它指向/opt 文件夹。更糟糕的是,JULIA_DEPOT_PATH 也是在编译包时编写的,因此在某些情况下,您最终需要以sudo 运行 Julia。

因此,我建议将JULIA_DEPOT_PATH 设置为:/home/user/.julia(这是默认设置)或类似于/home/user/JuliaPkg1.6.2 的内容

由于您已将软件包安装到 /opt/julia/julia-1.6.2/share/julia/stdlib/v1.6,我建议删除 /opt/julia/julia-1.6.2/ 并将 Julia 重新安装到该文件夹​​。

JULIA_HISTORY 应该再次指向JULIA_DEPOT_PATH 中的某个位置,否则您需要root 才能使用REPL。您不需要JULIA_PROJECT,因为默认情况下JULIA_DEPOT_PATH/environments/v1.6 处的Project.toml 应该被加载。与JULIA_LOAD_PATHJULIA_PKG_DEVDIR 类似的故事。

总之,我会考虑只保留JULIA_HOMEJULIA_DEPOT_PATH 变量,后者需要指向Julia 安装之外不需要root 写入权限的位置。

参考:https://docs.julialang.org/en/v1/manual/environment-variables/

【讨论】:

当您说损坏时,您的确切意思是什么?比如某些文件实际上是被编辑和覆盖的,还是 Julia 假设只有某些文件会存在于 depot 路径(和其他文件)上并且添加新文件会搞砸? 我对 Julia 包管理器的体验是,如果您在安装过程中操纵包并破坏该过程,则基本上很难恢复。我尝试过几次 Pkg.add("SomePackage") 并在过程中间按Ctrl+C - 它通常不会很好地结束。也许 1.7.0 更具弹性 - 但是,每当出现超出 Pkg.instantiate()Pkg.build() 的问题时,对我来说最简单的选择就是重新创建 DEPOT_PATH

以上是关于如何在 julia-1.6.2 上安装包 MbedTLS?的主要内容,如果未能解决你的问题,请参考以下文章

ARM mbed平台WIZwiki-W7500使用说明

为LPC1549 LPCXpresso评估板开发基于mbed的项目

使用 mbed 框架在 STM32 上运行 GMP 的串行 printf

使用 Eclipse 调试 MBED

mbed + platformio.org:建议?

ROS + STM32 + mbed