kopia lustrzana https://github.com/jupyterhub/repo2docker
add docstrings for conda buildpack
rodzic
81a3152527
commit
5aaf78a828
|
@ -1,6 +1,4 @@
|
||||||
"""
|
"""BuildPack for conda environments"""
|
||||||
Buildpack for conda environments
|
|
||||||
"""
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
@ -15,16 +13,48 @@ HERE = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
|
||||||
class CondaBuildPack(BaseImage):
|
class CondaBuildPack(BaseImage):
|
||||||
|
"""A conda BuildPack.
|
||||||
|
|
||||||
|
Uses miniconda since it is more lightweight than Anaconda.
|
||||||
|
|
||||||
|
"""
|
||||||
def get_env(self):
|
def get_env(self):
|
||||||
|
"""Return environment variables to be set.
|
||||||
|
|
||||||
|
We set `CONDA_DIR` to the conda install directory and
|
||||||
|
the `NB_PYTHON_PREFIX` to the location of the jupyter binary.
|
||||||
|
|
||||||
|
"""
|
||||||
return super().get_env() + [
|
return super().get_env() + [
|
||||||
('CONDA_DIR', '${APP_BASE}/conda'),
|
('CONDA_DIR', '${APP_BASE}/conda'),
|
||||||
('NB_PYTHON_PREFIX', '${CONDA_DIR}'),
|
('NB_PYTHON_PREFIX', '${CONDA_DIR}'),
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_path(self):
|
def get_path(self):
|
||||||
|
"""Return paths (including conda environment path) to be added to
|
||||||
|
the PATH environment variable.
|
||||||
|
|
||||||
|
"""
|
||||||
return super().get_path() + ['${CONDA_DIR}/bin']
|
return super().get_path() + ['${CONDA_DIR}/bin']
|
||||||
|
|
||||||
def get_build_scripts(self):
|
def get_build_scripts(self):
|
||||||
|
"""
|
||||||
|
Return series of build-steps common to all Python 3 repositories.
|
||||||
|
|
||||||
|
All scripts here should be independent of contents of the repository.
|
||||||
|
|
||||||
|
This sets up through `install-miniconda.bash` (found in this directory):
|
||||||
|
|
||||||
|
- a directory for the conda environment and its ownership by the
|
||||||
|
notebook user
|
||||||
|
- a Python 3 interpreter for the conda environment
|
||||||
|
- a Python 3 jupyter kernel
|
||||||
|
- a frozen base set of requirements, including:
|
||||||
|
- support for Jupyter widgets
|
||||||
|
- support for JupyterLab
|
||||||
|
- support for nteract
|
||||||
|
|
||||||
|
"""
|
||||||
return super().get_build_scripts() + [
|
return super().get_build_scripts() + [
|
||||||
(
|
(
|
||||||
"root",
|
"root",
|
||||||
|
@ -41,6 +71,20 @@ class CondaBuildPack(BaseImage):
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_build_script_files(self):
|
def get_build_script_files(self):
|
||||||
|
"""
|
||||||
|
Dict of files to be copied to the container image for use in building.
|
||||||
|
|
||||||
|
This is copied before the `build_scripts` & `assemble_scripts` are
|
||||||
|
run, so can be executed from either of them.
|
||||||
|
|
||||||
|
It's a dictionary where the key is the source file path in the host
|
||||||
|
system, and the value is the destination file path inside the
|
||||||
|
container image.
|
||||||
|
|
||||||
|
This currently adds a frozen set of Python requirements to the dict
|
||||||
|
of files.
|
||||||
|
|
||||||
|
"""
|
||||||
files = {
|
files = {
|
||||||
'conda/install-miniconda.bash': '/tmp/install-miniconda.bash',
|
'conda/install-miniconda.bash': '/tmp/install-miniconda.bash',
|
||||||
}
|
}
|
||||||
|
@ -69,10 +113,11 @@ class CondaBuildPack(BaseImage):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def python_version(self):
|
def python_version(self):
|
||||||
"""
|
"""Detect the Python version for a given `environment.yml`
|
||||||
Detect the Python version for a given environment.yml
|
|
||||||
|
Will return 'x.y' if version is found (e.g '3.6'),
|
||||||
|
or a Falsy empty string '' if not found.
|
||||||
|
|
||||||
Will return 'x.y' if found, or Falsy '' if not.
|
|
||||||
"""
|
"""
|
||||||
environment_yml = self.binder_path('environment.yml')
|
environment_yml = self.binder_path('environment.yml')
|
||||||
if not os.path.exists(environment_yml):
|
if not os.path.exists(environment_yml):
|
||||||
|
@ -109,6 +154,8 @@ class CondaBuildPack(BaseImage):
|
||||||
return self.python_version and self.python_version.split('.')[0] == '2'
|
return self.python_version and self.python_version.split('.')[0] == '2'
|
||||||
|
|
||||||
def get_assemble_scripts(self):
|
def get_assemble_scripts(self):
|
||||||
|
"""Return series of build-steps specific to this source repository.
|
||||||
|
"""
|
||||||
assembly_scripts = []
|
assembly_scripts = []
|
||||||
environment_yml = self.binder_path('environment.yml')
|
environment_yml = self.binder_path('environment.yml')
|
||||||
env_name = 'kernel' if self.py2 else 'root'
|
env_name = 'kernel' if self.py2 else 'root'
|
||||||
|
@ -124,4 +171,6 @@ class CondaBuildPack(BaseImage):
|
||||||
return super().get_assemble_scripts() + assembly_scripts
|
return super().get_assemble_scripts() + assembly_scripts
|
||||||
|
|
||||||
def detect(self):
|
def detect(self):
|
||||||
|
"""Check if current repo should be built with the Conda BuildPack.
|
||||||
|
"""
|
||||||
return os.path.exists(self.binder_path('environment.yml')) and super().detect()
|
return os.path.exists(self.binder_path('environment.yml')) and super().detect()
|
||||||
|
|
Ładowanie…
Reference in New Issue