~ruther/qmk_firmware

4742a3a48f7560ee4dd2b55d4ecad4cdf1d139cd — Zach White 4 years ago 0c175d6
use sudo to install modules if needed (#13984)

1 files changed, 22 insertions(+), 2 deletions(-)

M lib/python/qmk/cli/__init__.py
M lib/python/qmk/cli/__init__.py => lib/python/qmk/cli/__init__.py +22 -2
@@ 65,6 65,26 @@ subcommands = [
]


def _install_deps(requirements):
    """Perform the installation of missing requirements.

    If we detect that we are running in a virtualenv we can't write into we'll use sudo to perform the pip install.
    """
    command = [sys.executable, '-m', 'pip', 'install']

    if sys.prefix != sys.base_prefix:
        # We are in a virtualenv, check to see if we need to use sudo to write to it
        if not os.access(sys.prefix, os.W_OK):
            print('Notice: Using sudo to install modules to location owned by root:', sys.prefix)
            command.insert(0, 'sudo')

    elif not os.access(sys.prefix, os.W_OK):
        # We can't write to sys.prefix, attempt to install locally
        command.append('--local')

    return _run_cmd(*command, '-r', requirements)


def _run_cmd(*command):
    """Run a command in a subshell.
    """


@@ 168,7 188,7 @@ safe_command = args and args[0] in safe_commands
if not safe_command:
    if _broken_module_imports('requirements.txt'):
        if yesno('Would you like to install the required Python modules?'):
            _run_cmd(sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt')
            _install_deps('requirements.txt')
        else:
            print()
            print(msg_install % (str(Path('requirements.txt').resolve()),))


@@ 177,7 197,7 @@ if not safe_command:

    if cli.config.user.developer and _broken_module_imports('requirements-dev.txt'):
        if yesno('Would you like to install the required developer Python modules?'):
            _run_cmd(sys.executable, '-m', 'pip', 'install', '-r', 'requirements-dev.txt')
            _install_deps('requirements-dev.txt')
        elif yesno('Would you like to disable developer mode?'):
            _run_cmd(sys.argv[0], 'config', 'user.developer=None')
        else: