簡體   English   中英

Docker Flask Conda - 不是 conda 環境

[英]Docker Flask Conda - Not a conda environment

我正在玩使用 conda 環境的 flask 應用程序。 應用程序在本地開發中運行良好,所以我想對其進行 docker 化。 通過 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 的第一個字符串'名稱:3DPhotoCreator ')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM