File size: 2,214 Bytes
0810b27
 
 
2deb5fc
e0d0dc1
2deb5fc
1312ca7
ba3d140
 
 
 
 
1312ca7
2deb5fc
0810b27
5b00b7d
 
0810b27
5b00b7d
 
 
 
0810b27
5b00b7d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60aa659
e0d0dc1
a398433
dc5faa1
e0d0dc1
2deb5fc
 
a398433
 
 
0810b27
a398433
 
 
 
 
0810b27
a398433
 
0810b27
2deb5fc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# This builds a dockerfile containing a working copy of PySR
# with all pre-requisites installed.

ARG PYVERSION=3.10.8

FROM python:$PYVERSION

# metainformation
LABEL org.opencontainers.image.authors = "Miles Cranmer"
LABEL org.opencontainers.image.source = "https://github.com/MilesCranmer/PySR"
LABEL org.opencontainers.image.licenses = "Apache License 2.0"

# Need to use ARG after FROM, otherwise it won't get passed through.
ARG JLVERSION=1.8.2

ENV PYVERSION $PYVERSION
ENV JLVERSION $JLVERSION

# arm64:
# https://julialang-s3.julialang.org/bin/linux/aarch64/1.8/julia-1.8.2-linux-aarch64.tar.gz
# amd64:
# https://julialang-s3.julialang.org/bin/linux/x64/1.8/julia-1.8.2-linux-x86_64.tar.gz

RUN export JULIA_VER=$(echo $JLVERSION | cut -d '.' -f -2) && \
    export ARCH=$(arch | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/') && \
    if [ "$ARCH" = "amd64" ]; then \
        export BASE_URL="https://julialang-s3.julialang.org/bin/linux/x64/$JULIA_VER" && \
        export FULL_URL=$BASE_URL/julia-$JLVERSION-linux-x86_64.tar.gz; \
    elif [ "$ARCH" = "arm64" ]; then \
        export BASE_URL="https://julialang-s3.julialang.org/bin/linux/aarch64/$JULIA_VER"; \
        export FULL_URL=$BASE_URL/julia-$JLVERSION-linux-aarch64.tar.gz; \
    else \
        echo "Download link for architecture ${ARCH} not found. Please add the corresponding Julia download URL to this Dockerfile." && \
        exit 1; \
    fi && \
    wget -nv $FULL_URL -O julia.tar.gz && \
    tar -xzf julia.tar.gz && \
    rm julia.tar.gz && \
    mv julia-$JLVERSION /opt/julia && \
    ln -s /opt/julia/bin/julia /usr/local/bin/julia

# Install IPython and other useful libraries:
RUN pip install ipython matplotlib

WORKDIR /pysr

# Caches install (https://stackoverflow.com/questions/25305788/how-to-avoid-reinstalling-packages-when-building-docker-image-for-python-project)
ADD ./requirements.txt /pysr/requirements.txt
RUN pip3 install -r /pysr/requirements.txt

# Install PySR:
# We do a minimal copy so it doesn't need to rerun at every file change:
ADD ./setup.py /pysr/setup.py
ADD ./pysr/ /pysr/pysr/
RUN pip3 install .

# Install Julia pre-requisites:
RUN python3 -c 'import pysr; pysr.install()'

CMD ["ipython"]