condas `source activate virtualenv` does not work within Dockerfile

前端 未结 3 686
盖世英雄少女心
盖世英雄少女心 2021-01-01 12:00

Scenario

I\'m trying to setup a simple docker image (I\'m quite new to docker, so please correct my possible misconceptions) based on the public continuum

3条回答
  •  鱼传尺愫
    2021-01-01 12:27

    Piggybacking on ccauet's answer (which I couldn't get to work), and Charles Duffey's comment about there being more to it than just PATH, here's what will take care of the issue.

    When activating an environment, conda sets the following variables, as well as a few that backup default values that can be referenced when deactivating the environment. These variables have been omitted from the Dockerfile, as the root conda environment need never be used again. For reference, these are CONDA_PATH_BACKUP, CONDA_PS1_BACKUP, and _CONDA_SET_PROJ_LIB. It also sets PS1 in order to show (testenv) at the left of the terminal prompt line, which was also omitted. The following statements will do what you want.

    ENV PATH /opt/conda/envs/testenv/bin:$PATH
    ENV CONDA_DEFAULT_ENV testenv
    ENV CONDA_PREFIX /opt/conda/envs/testenv
    

    In order to shrink the number of layers created, you can combine these commands into a single ENV command setting all the variables at once as well.

    There may be some other variables that need to be set, based on the package. For example,

    ENV GDAL_DATA /opt/conda/envs/testenv/share/gdal
    ENV CPL_ZIP_ENCODING UTF-8
    ENV PROJ_LIB /opt/conda/envs/testenv/share/proj
    

    The easy way to get this information is to call printenv > root_env.txt in the root environment, activate testenv, then call printenv > test_env.txt, and examine diff root_env.txt test_env.txt.

提交回复
热议问题