39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
"""Python related tools."""
|
|
|
|
import os
|
|
|
|
from . import package
|
|
from . import utils
|
|
|
|
|
|
def get_pip_path(venv):
|
|
"""Return the full path to pip command."""
|
|
binpath = "pip"
|
|
if venv:
|
|
binpath = os.path.join(venv, "bin", binpath)
|
|
return binpath
|
|
|
|
|
|
def install_package(name, venv=None, upgrade=False, **kwargs):
|
|
"""Install a Python package using pip."""
|
|
cmd = "{} install {}{}".format(
|
|
get_pip_path(venv), " -U " if upgrade else "", name)
|
|
utils.exec_cmd(cmd, **kwargs)
|
|
|
|
|
|
def install_packages(names, venv=None, upgrade=False, **kwargs):
|
|
"""Install a Python package using pip."""
|
|
cmd = "{} install {}{}".format(
|
|
get_pip_path(venv), " -U " if upgrade else "", " ".join(names))
|
|
utils.exec_cmd(cmd, **kwargs)
|
|
|
|
|
|
def setup_virtualenv(path, sudo_user=None):
|
|
"""Install a virtualenv if needed."""
|
|
if os.path.exists(path):
|
|
return
|
|
package.backend.install_many(["python-virtualenv", "virtualenv"])
|
|
with utils.settings(sudo_user=sudo_user):
|
|
utils.exec_cmd("virtualenv {}".format(path))
|
|
install_package("pip", venv=path, upgrade=True)
|