74 lines
2.5 KiB
Python
Raw Normal View History

2023-05-19 13:09:58 +08:00
import os
import subprocess
import sys
# replace python3 with sys.executable, we will do everything in the same envrionment
pythonCommand = sys.executable
print('Python command:', pythonCommand)
def ensure_pip_installed():
print("install pip ...")
try:
subprocess.run([pythonCommand, "-m", "ensurepip", "--upgrade"], check=True)
return True
except Exception as e:
print(e)
return False
2023-05-19 13:09:58 +08:00
def check_pipx_installed():
try:
subprocess.run([pythonCommand, "-m", "pipx", "--version"], check=True)
2023-05-19 13:09:58 +08:00
return True
except Exception as e:
return False
def install_pipx():
print("Installing pipx...")
try:
subprocess.run([pythonCommand, "-m", "pip", "install", "pipx", "--force"], check=True)
2023-05-19 13:09:58 +08:00
print("pipx installed successfully.")
except subprocess.CalledProcessError as e:
print("Error installing pipx:", e, file=sys.stderr)
sys.exit(1)
def add_pipx_to_path():
print("Adding pipx to PATH...")
subprocess.run([pythonCommand, "-m", "pipx", "ensurepath"], check=True)
result = subprocess.run([pythonCommand, "-m", "pipx", "environment"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
2023-05-19 13:09:58 +08:00
pipx_path_line = [line for line in result.stdout.splitlines() if "PIPX_BIN_DIR" in line]
if pipx_path_line:
pipx_path = pipx_path_line[0].split('=')[-1].strip()
os.environ["PATH"] += os.pathsep + pipx_path
print("pipx path added to environment variables.")
else:
print("Error: Could not find pipx path in environment output.", file=sys.stderr)
sys.exit(1)
def install_devchat():
print("Installing devchat...")
try:
subprocess.run([pythonCommand, "-m", "pipx", "install", "devchat"], check=True)
2023-05-19 13:09:58 +08:00
print("devchat installed successfully.")
except subprocess.CalledProcessError as e:
print("Error installing devchat:", e, file=sys.stderr)
sys.exit(1)
def upgrade_devchat():
print("Upgrading devchat...")
try:
subprocess.run([pythonCommand, "-m", "pipx", "upgrade", "devchat"], check=True)
2023-05-19 13:09:58 +08:00
print("devchat upgraded successfully.")
except subprocess.CalledProcessError as e:
print("Error upgrading devchat:", e, file=sys.stderr)
sys.exit(1)
def main():
ensure_pip_installed()
2023-05-19 13:09:58 +08:00
if not check_pipx_installed():
install_pipx()
add_pipx_to_path()
install_devchat()
upgrade_devchat()
if __name__ == "__main__":
main()