【问题标题】:Upgrade Python in Jenkins Docker在 Jenkins Docker 中升级 Python
【发布时间】:2019-02-28 10:36:29
【问题描述】:

我目前有一个包含 Jenkins 和 Python 的 docker 映像。

我做了类似的事情

FROM jenkins/jenkins:lts
USER root
RUN apt-get update && \
    apt-get install -y python python-pip python3-pip && \
    ... (and more stuff)
... (I also install gcloud sdk)
WORKDIR /opt/app
RUN /usr/bin/env python3 -m pip install --upgrade pip \
    && /usr/bin/env python3 -m pip install pipenv==2018.10.13
RUN /usr/bin/env python -m pip install --upgrade pip \
    && /usr/bin/env python -m pip install pipenv==2018.10.13
RUN chown jenkins /opt/app -R
USER jenkins

但这会安装 python 3.5.3 (https://packages.debian.org/stretch/python3)

我需要 python 3.7(以及 python 2.7.15)。

所以,我正在尝试使用多个FROM,正如herethere 所解释的那样。但无济于事。

FROM python:2.7.15-stretch as py2
FROM python:3.7.2-stretch as py3
FROM jenkins/jenkins:lts as jenkins

我很确定它不会太复杂......一旦你玩过它......

所以,欢迎任何帮助。

【问题讨论】:

    标签: python docker jenkins


    【解决方案1】:

    有效!我确实喜欢这样:

    FROM python:3.7.2-stretch as py3
    
    FROM python:2.7.15-stretch as py2
    
    FROM jenkins/jenkins:lts
    
    USER root
    COPY --from=py2 /usr/local/lib /usr/local/lib
    COPY --from=py2 /usr/local/bin /usr/local/bin
    COPY --from=py2 /usr/local/include /usr/local/include
    COPY --from=py2 /usr/local/man /usr/local/man
    COPY --from=py2 /usr/local/share /usr/local/share
    
    COPY --from=py3 /usr/local/lib /usr/local/lib
    COPY --from=py3 /usr/local/bin /usr/local/bin
    COPY --from=py3 /usr/local/include /usr/local/include
    COPY --from=py3 /usr/local/man /usr/local/man
    COPY --from=py3 /usr/local/share /usr/local/share
    
    RUN apt-get update && \
        ...
    

    【讨论】:

    • 我不确定这里正在做什么。 Python3.7真的安装了吗?
    • 这不起作用:python:加载共享库时出错:libpython3.7m.so.1.0:无法打开共享对象文件:没有这样的文件或目录
    【解决方案2】:

    TL&DR:这是在 Jenkins 提供的 docker-image 上获取最新 python 的最佳方式。

    说明

    创建一个包含以下内容的 DockerFile:

    FROM jenkins/jenkins:lts-alpine
    USER root
    RUN apk add python3 && \
         python3 -m ensurepip && \
         pip3 install --upgrade pip setuptools && \
         if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
         if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \
         rm -r /root/.cache
    RUN apk add pkgconf
    RUN apk add build-base
    RUN apk add python3-dev
    RUN apk add postgresql-dev
    RUN apk add postgresql-client
    

    【讨论】:

      【解决方案3】:

      您可以使用 wget 下载并安装您想要的 python 版本。

      例如在jenkins:lts-jdk11上安装python3.8.12

      FROM jenkins/jenkins:lts-jdk11
      
      RUN apt-get update -y && apt-get install -y \
          # Tools
          sudo net-tools wget vim nfs-common arping curl \
          # Required libs 
          build-essential libreadline-gplv2-dev libncursesw5-dev \
          libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev zlib1g-dev \
          libxml2-dev libxslt1-dev libffi-dev libssl-dev libz-dev && \
          # Install python
          mkdir install_py && cd install_py && \
          sudo wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz && \
          sudo tar xzf Python-3.8.12.tgz && \
          cd Python-3.8.12 && \
          sudo ./configure --enable-optimizations && \
          sudo make altinstall && \
          cd ../.. && rm -r install_py && \
          # Set default python path to use python
          sudo ln -snf /usr/local/bin/python3.8 /usr/bin/python && \
          python -m pip install --upgrade pip
      
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-15
        • 1970-01-01
        • 2012-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多