diff --git a/integration-tests/plugins/simplest/tljh_simplest.py b/integration-tests/plugins/simplest/tljh_simplest.py index 0da9a2a..053b1fd 100644 --- a/integration-tests/plugins/simplest/tljh_simplest.py +++ b/integration-tests/plugins/simplest/tljh_simplest.py @@ -17,6 +17,11 @@ def tljh_extra_user_pip_packages(): 'django', ] +@hookimpl +def tljh_extra_hub_pip_packages(): + return [ + 'there', + ] @hookimpl def tljh_extra_apt_packages(): diff --git a/integration-tests/test_simplest_plugin.py b/integration-tests/test_simplest_plugin.py index 29b4fab..81193dd 100644 --- a/integration-tests/test_simplest_plugin.py +++ b/integration-tests/test_simplest_plugin.py @@ -4,7 +4,7 @@ Test simplest plugin from ruamel.yaml import YAML import os import subprocess -from tljh.config import CONFIG_FILE, USER_ENV_PREFIX +from tljh.config import CONFIG_FILE, USER_ENV_PREFIX, HUB_ENV_PREFIX yaml = YAML(typ='rt') @@ -18,7 +18,7 @@ def test_apt_packages(): def test_pip_packages(): """ - Test extra user pip packages are installed + Test extra user & hub pip packages are installed """ subprocess.check_call([ f'{USER_ENV_PREFIX}/bin/python3', @@ -26,6 +26,12 @@ def test_pip_packages(): 'import django' ]) + subprocess.check_call([ + f'{HUB_ENV_PREFIX}/bin/python3', + '-c', + 'import there' + ]) + def test_conda_packages(): """ diff --git a/tljh/hooks.py b/tljh/hooks.py index 8cd6d56..ece2a40 100644 --- a/tljh/hooks.py +++ b/tljh/hooks.py @@ -22,6 +22,12 @@ def tljh_extra_user_pip_packages(): """ pass +@hookspec +def tljh_extra_hub_pip_packages(): + """ + Return list of extra pip packages to install in the hub environment. + """ + pass @hookspec def tljh_extra_apt_packages(): diff --git a/tljh/installer.py b/tljh/installer.py index 3447e06..3a4ea93 100644 --- a/tljh/installer.py +++ b/tljh/installer.py @@ -381,21 +381,29 @@ def run_plugin_actions(plugin_manager, plugins): )) apt.install_packages(apt_packages) + # Install hub pip packages + hub_pip_packages = list(set(itertools.chain(*hook.tljh_extra_hub_pip_packages()))) + if hub_pip_packages: + logger.info('Installing {} hub pip packages collected from plugins: {}'.format( + len(hub_pip_packages), ' '.join(hub_pip_packages) + )) + conda.ensure_pip_packages(HUB_ENV_PREFIX, hub_pip_packages) + # Install conda packages conda_packages = list(set(itertools.chain(*hook.tljh_extra_user_conda_packages()))) if conda_packages: - logger.info('Installing {} conda packages collected from plugins: {}'.format( + logger.info('Installing {} user conda packages collected from plugins: {}'.format( len(conda_packages), ' '.join(conda_packages) )) conda.ensure_conda_packages(USER_ENV_PREFIX, conda_packages) # Install pip packages - pip_packages = list(set(itertools.chain(*hook.tljh_extra_user_pip_packages()))) - if pip_packages: - logger.info('Installing {} pip packages collected from plugins: {}'.format( - len(pip_packages), ' '.join(pip_packages) + user_pip_packages = list(set(itertools.chain(*hook.tljh_extra_user_pip_packages()))) + if user_pip_packages: + logger.info('Installing {} user pip packages collected from plugins: {}'.format( + len(user_pip_packages), ' '.join(user_pip_packages) )) - conda.ensure_pip_packages(USER_ENV_PREFIX, pip_packages) + conda.ensure_pip_packages(USER_ENV_PREFIX, user_pip_packages) def ensure_config_yaml(plugin_manager):