在Che7中,我创建了一个使用我构建的自定义docker映像的工作区。该docker映像已安装Python3.7,并通过pip安装了名为Pyomo的第三方模块。工作区正常启动,如果我在该图像中打开终端,可以看到已安装Pyomo,但是在运行时我无法将模块导入到我的python代码中。
我试图确定devfile中包含的dockerimage和Python运行时环境之间的区别。我注意到的是,在其下执行python的用户是'theia',因此在运行时我可以打印出/ home / theia目录的内容,但是如果我有一个终端打开我创建的图像,则可以没有theia用户。
我尝试从我的python脚本安装模块,但是失败,因为我没有权限。 (我并不是真的想这样做,因为它感觉有点黑。我宁愿弄清楚工作区的正确配置)
下面是我必须在安装Pyomo的情况下创建映像的docker文件。
FROM <my-ubuntu-image>
RUN sudo apt-get purge -y python.* && \
sudo apt autoremove -y && \
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends \
autoconf \
automake \
bzip2 \
file \
g++ \
gcc \
imagemagick \
libbz2-dev \
libc6-dev \
libcurl4-openssl-dev libdb-dev libevent-dev libffi-dev libgdbm-dev libgeoip-dev libglib2.0-dev libjpeg-dev \
libkrb5-dev liblzma-dev libmagickcore-dev libmagickwand-dev libmysqlclient-dev libncurses-dev libpng-dev \
libpq-dev libreadline-dev libsqlite3-dev libssl-dev libtool libwebp-dev libxml2-dev libxslt-dev libyaml-dev make patch xz-utils zlib1g-dev
ENV LANG=C.UTF-8
ENV PYTHON_VERSION=3.7.4
ENV PYTHON_PIP_VERSION=19.2.3
RUN set -ex && \
sudo curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz && \
sudo curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc && \
export GNUPGHOME="$(mktemp -d)" && \
sudo rm -r "$GNUPGHOME" python.tar.xz.asc && \
sudo mkdir -p /usr/src/python && \
sudo tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz && \
sudo rm python.tar.xz && \
cd /usr/src/python && \
sudo ./configure --enable-shared --enable-unicode=ucs4 && \
sudo make -j$(nproc) && \
sudo make install && \
sudo ldconfig && \
sudo pip3 install --upgrade --ignore-installed pip==$PYTHON_PIP_VERSION && \
sudo pip3 install pyomo && \
sudo find /usr/local \( -type d -a -name test -o -name tests \) -o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) -exec rm -rf '{}' + && \
sudo rm -rf /usr/src/python
RUN cd /usr/local/bin && \
sudo ln -s easy_install-3.7 easy_install && \
sudo ln -s idle3 idle && \
sudo ln -s pydoc3 pydoc && \
sudo ln -s python3 python && \
sudo ln -s python-config3 python-config
RUN sudo pip3 install --upgrade pip && \
sudo pip3 install --no-cache-dir virtualenv && \
sudo pip3 install --upgrade setuptools && \
sudo pip3 install 'python-language-server[all]'
EXPOSE 8080
成功构建此docker映像后,我将创建一个工作区,并且devfile在下面
metadata:
name: Pyomo
projects:
- name: python-hello-world
source:
location: 'https://github.com/che-samples/python-hello-world.git'
type: git
branch: master
components:
- id: ms-python/python/latest
memoryLimit: 512Mi
type: chePlugin
- mountSources: true
memoryLimit: 512Mi
type: dockerimage
alias: pyomo
image: '<my-Pyomo-image>'
apiVersion: 1.0.0
commands:
- name: run
actions:
- workdir: '${CHE_PROJECTS_ROOT}/python-hello-world'
type: exec
command: python hello-world.py
component: python
工作空间成功打开后,以下内容将无法工作
import pyomo
我的期望是,由于在docker映像中安装了Pyomo(或任何其他python模块),因此可以在Che Workspace中进行编码。