Это действительно зависит от того, хотите ли вы играть с Julia
изначально или вы на ру sh и готовы использовать установку на Docker
.
Если вы можете пожертвовать нативным подходом, вы может создать простой Docker
контейнер (встроенный в следующее Dockerfile
):
FROM ubuntu:18.10
LABEL description="Environment for running Julia based codes"
RUN apt-get update
RUN apt-get install -y git
RUN apt-get install -y vim
RUN apt-get install -y libopenmpi-dev
RUN apt-get install -y openmpi-bin
RUN apt-get install -y gfortran
RUN apt-get install -y open-coarrays-bin
RUN apt-get install -y make
RUN apt-get install -y tree
RUN apt-get install -y gdb
RUN apt-get install -y curl
RUN mkdir -p /opt
ADD run.sh /opt/run.sh
RUN chmod +x /opt/run.sh
RUN useradd -ms /bin/bash fortcoder
USER fortcoder
WORKDIR /home/fortcoder
RUN echo 'PS1="[\u@coarray-docker:\w ] $ "' >> /home/fortcoder/.bashrc
RUN echo 'PATH=/home/fortcoder/opt/julia/julia-1.3.1/bin:${PATH}' >> /home/fortcoder/.bashrc
RUN mkdir -p /home/fortcoder/code
RUN mkdir -p /home/fortcoder/opt/julia
RUN curl -o /home/fortcoder/opt/julia/julia-1.3.1-linux-x86_64.tar.gz https://julialang-s3.julialang.org/bin/linux/x64/1.3/julia-1.3.1-linux-x86_64.tar.gz
RUN tar zxf /home/fortcoder/opt/julia/julia-1.3.1-linux-x86_64.tar.gz -C /home/fortcoder/opt/julia/
CMD /opt/run.sh
обязательно поставьте run.sh
рядом с Dockerfile
#!/bin/bash
cat << EOF
***************************************************
Juli Docker for macOS
-----------------------------------------------
This Docker image allows you to play with
Julia on macOS.
Remember that you can easily attach other
samples by passing
-v ~/dir_with_code:/home/fortcoder/code
to your 'docker -it' command
-----------------------------------------------
EOF
/bin/bash
Затем вы можете создать контейнер следующим образом:
> docker build -t coarrays .
> mkdir sample_code
> docker run -i -t -v `pwd`/sample_code:/home/fortcoder/code coarrays
Вы можете сопоставить каталог на основе macOS (sample_code
) с каталогом внутри контейнера.
Как только вы окажетесь в контейнере, просто запустите julia
> julia
> using Pkg
> Pkg.clone("https://github.com/QuantEcon/Games.jl")
┌ Warning: Pkg.clone is only kept for legacy CI script reasons, please use `add`
└ @ Pkg.API /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/API.jl:664
Cloning git-repo `https://github.com/QuantEcon/Games.jl`
...
...
Building CMake ─────→ `~/.julia/packages/CMake/nSK2r/deps/build.log`
Building MbedTLS ───→ `~/.julia/packages/MbedTLS/a1JFn/deps/build.log`
Building NLopt ─────→ `~/.julia/packages/NLopt/eqN9a/deps/build.log`
Building CodecBzip2 → `~/.julia/packages/CodecBzip2/T5yr7/deps/build.log`
Building CodecZlib ─→ `~/.julia/packages/CodecZlib/5t9zO/deps/build.log`
Building FFTW ──────→ `~/.julia/packages/FFTW/qqcBj/deps/build.log`
Building Rmath ─────→ `~/.julia/packages/Rmath/BoBag/deps/build.log`
Building Clp ───────→ `~/.julia/packages/Clp/4DejL/deps/build.log`
julia>
после установки Games
, вы можете выйти из julia
и запустить свой код. Просто создайте файл внутри Docker
контейнера (code.jl
).
using Games
pd_payoff = [9.0 1.0; 10.0 3.0]
A, B = Player(pd_payoff), Player(pd_payoff)
pd = NormalFormGame((A, B))
rpd = RepeatedGame(pd, 0.75)
hp_pts = outerapproximation(rpd; nH=64, maxiter=500, tol=1e-8, verbose=true, nskipprint=10)
и запустите его
> julia ./code.jl
10 0.08865814883358247 (2.709875698216042, 2.7098756982160457)
20 0.004992651968453998 (2.9836620808639114, 2.983662080863915)
30 0.0002811537800653241 (2.9990799543504063, 2.9990799543504094)
40 1.5832757529921082e-5 (2.9999481889957704, 2.9999481889957793)
50 8.915982272483802e-7 (2.999997082340249, 2.999997082340251)
60 5.020902937857841e-8 (2.999999835696323, 2.9999998356963244)
>