Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在docker容器中的虚拟环境中安装python应用程序?_Linux_Docker_Installation_Virtualenv_Python 3.6 - Fatal编程技术网

Linux 如何在docker容器中的虚拟环境中安装python应用程序?

Linux 如何在docker容器中的虚拟环境中安装python应用程序?,linux,docker,installation,virtualenv,python-3.6,Linux,Docker,Installation,Virtualenv,Python 3.6,我有一个python 3.6应用程序,我使用pip安装在本地安装。和setup.py文件。我已经在本地对其进行了测试,下一步是将其移动到docker容器中。我正在使用docker hub的标准Python 3.6基本映像,并在windows 10主机上运行该容器。我有以下dockerfile: FROM python:3.6 WORKDIR /opt # create a virtual environment and add it to PATH so that it is # appl

我有一个python 3.6应用程序,我使用pip安装在本地安装。和setup.py文件。我已经在本地对其进行了测试,下一步是将其移动到docker容器中。我正在使用docker hub的标准Python 3.6基本映像,并在windows 10主机上运行该容器。我有以下dockerfile:

FROM python:3.6

WORKDIR /opt

# create a virtual environment and add it to PATH so that it is 
# applied for all future RUN and CMD calls
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

# Install Mono for pythonnet.
RUN apt-get update \
&& apt-get install --yes \
    apt-transport-https \
    git \
    dirmngr \
    clang \
    gnupg \
    ca-certificates \
    # Dependency for pyodbc.
    unixodbc-dev \
&& apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv- 
keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \

&& echo "deb http://download.mono-project.com/repo/debian 
stretch/snapshots/5.20 main" | tee /etc/apt/sources.list.d/mono- 
official-stable.list \

&& apt-get update \
&& apt-get install --yes \

&& rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
COPY src ./src
COPY setup.py ./setup.py
COPY config.json ./config.json
COPY Utility.dll ./Utility.dll
COPY settings.ini ./settings.ini
COPY redis_conf.json ./redis_conf.json
COPY sql_config.json ./sql_config.json

RUN python3 -m venv $VIRTUAL_ENV \
# From here on, use virtual env's python.
&& pip install --upgrade pip \
&& pip install --no-cache-dir --upgrade pip setuptools wheel \

&& pip install --no-cache-dir -r requirements.txt \
# Dependency for pythonnet.
&& python -m pip install --no-cache-dir pycparser \
&& python -m pip install -U pythonnet \
&& python setup.py install

构建进行得很顺利,输出中没有错误,但是当我检查容器中的文件系统时,我看到pythonnet和pycparser不在venv/bin/lib目录或其他任何地方。根目录中有一个egg info文件,但没有安装应用程序的迹象。我在这里哪里出错了?

我在下面附上了示例dockerfile,它有助于部署使用python和flask框架编码的产品的生产级版本

我在下面附上了示例dockerfile
来自python:3.8-slim-buster
运行python3-m-venv/opt/venv
#安装依赖项:
复制requirements.txt。
运行/opt/venv/bin/pip安装-r requirements.txt
#运行应用程序:
复制myapp.py。

CMD[“/opt/venv/bin/python”,“myapp.py”]
如果您在Docker中运行python,典型的做法是使用Docker映像而不是虚拟环境——这两种设置都提供独立于外部主机上python安装的python包集。我会删除所有提到
$VIRTUAL_ENV
的行,并在图像中使用“系统”Python。(另请参见其中建议的几种解决方法。)@David Maze虚拟环境和图像不是使用相同的python吗?另外,如果我使用python的映像版本,我的应用程序将安装在哪里?类似于
/usr/lib/python3.6/site packages
,但在映像的独立文件系统中。这与我使用的映像不同,这就是为什么在您的情况下它可以工作的原因。我在我的dockerfile中基本上也在做同样的事情。