我正在为一个 Julia 项目构建一个 Docker 容器,并且在使用该项目的 Project.toml 文件时遇到了 Pkg.activate(".") 问题。这是我在做什么:
FROM julia:1.0.2 AS base
ADD src/*.jl /microservice/src/
COPY Manifest.toml /microservice/Manifest.toml
COPY Project.toml /microservice/Project.toml
COPY src/startup.jl /root/.julia/config/startup.jl
WORKDIR /microservice
RUN julia -e 'cd("/microservice")'
RUN julia -e 'using Pkg; Pkg.activate(".")'
RUN julia -e 'using Pkg; Pkg.instantiate()'
RUN julia -e 'using Pkg; Pkg.status()'
RUN julia -e 'println(Base.active_project())'
Run Code Online (Sandbox Code Playgroud)
当我使用上述 Dockerfile 代码构建容器时,我可以验证所有源代码和 .toml 文件都在容器中。调用Pkg.status()结果为:Status ~/.julia/environments/v1.0/Project.toml
并Base.active_project()导致:
/root/.julia/environments/v1.0/Project.toml
我错过了Pkg.activate(".")使用我复制到的 Project.toml的电话/microservice吗?
激活的环境在 julia 会话之间不是持久的,因此您需要在每个会话中激活它。using Pkg; Pkg.activate(".")您有两个更好的选择,而不是开始每个会话:
用--project标志启动 julia (记录在本页https://docs.julialang.org/en/v1/manual/getting-started/#man-getting-started-1的表格中)即
RUN julia --project=/microservice -e 'using Pkg; Pkg.instantiate()'
RUN julia --project=/microservice -e 'using Pkg; Pkg.status()'
RUN julia --project=/microservice -e 'println(Base.active_project())'
Run Code Online (Sandbox Code Playgroud)设置JULIA_PROJECT环境标志(https://docs.julialang.org/en/v1/manual/environment-variables/#JULIA_PROJECT-1)
ENV JULIA_PROJECT=/microservice
RUN julia -e 'using Pkg; Pkg.instantiate()'
RUN julia -e 'using Pkg; Pkg.status()'
RUN julia -e 'println(Base.active_project())'
Run Code Online (Sandbox Code Playgroud)在这种情况下,我会说第二个选项更好,因为我假设您将始终在容器中使用此包环境。
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |