我正在使用使用conda环境的烧瓶应用程序。应用程序在本地开发中运行良好,所以我想对它进行 dockerization。通过 Dockerfile 构建是成功的,但是当我通过以下方式运行应用程序时:
docker run -p 5000:5000 3d-photo
我得到了:
Not a conda environment: /opt/conda/envs/myenv
File "app.py", line 18
def render(filter_name: str):
^
SyntaxError: invalid syntax
ERROR conda.cli.main_run:execute(39): Subprocess for 'conda run [u'python', u'app.py']' command failed. Stderr was:
Not a conda environment: /opt/conda/envs/myenv
File "app.py", line 18
def render(filter_name: str):
^
SyntaxError: invalid syntax
引发错误的代码如下所示:
@app.route("/render/<filter_name>", methods=["POST"])
def render(filter_name: str):
if request.method == "POST":
f = request.files["file"]
tempdir = tempfile.mkdtemp()
in_dir = tempfile.mkdtemp(prefix="image_", dir=tempdir)
out_dir = tempfile.mkdtemp(prefix="image_", dir=tempdir)
image = Image.open(BytesIO(f.read()))
image.save(in_dir.name + "/image.jpg", "JPEG")
render_mp4(in_dir.name, out_dir.name, filter_name)
filename = "image_" + filter_name + ".mp4"
fout = open(os.path.join(out_dir.name, filename), "rb")
response = make_response(fout.read())
response.headers.set("Content-Type", "video/mp4")
response.headers.set("Content-Disposition", "attachment", filename=filename)
shutil.rmtree(tempdir)
return response
和 Dockerfile:
FROM ubuntu:latest
FROM continuumio/miniconda:latest
RUN apt-get update && apt-get install -y
python3-pip
python3-dev
build-essential
RUN pip3 install auxlib
COPY . /app
WORKDIR /app
RUN conda env create --file exported_conda_env.yml
SHELL ["conda", "run", "-n", "3DPhotoCreator", "/bin/bash", "-c"]
RUN pip install -r requirements.txt
RUN conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit==10.1.243 -c pytorch
EXPOSE 5000
CMD ["conda", "run", "-n", "myenv", "python", "app.py"]
这里有任何提示吗?
您从未创建过名为myenv
的环境。 看起来您创建了一个名为3DPhotoCreator
的环境,但不是myenv
。 目前尚不清楚您要做什么。
顺便说一句,我认为可能没有必要使用conda run
,除非您的依赖项依赖于设置的特殊环境变量。 (我不认为他们这样做。 您可能只调用 python 解释器而不显式激活环境:
CMD /opt/conda/envs/3DPhotoCreator/bin/python app.py
从文件创建环境。我们不知道你在 environment.yml 中设置了哪个名称,假设它是 3DPhotoCreator。你使用它来安装软件包,但最后在CMD中,你不使用这个甚至不存在的环境。更改为
CMD ["conda", "run", "-n", "3DPhotoCreator", "python", "app.py"]
为了更清楚地说明使用哪个环境,您可以在创建过程中从 environment.yml 命名它
conda env create --name myenv --file exported_conda_env.yml
所以现在你有myenv,它只是重命名了从environment.yml创建的环境(它忽略了environment.yml的第一个字符串">name:3DPhotoCreator"(