| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #!/usr/bin/env python
- """
- display environment information that is frequently
- used to troubleshoot installations of Jupyter or IPython
- """
- from __future__ import annotations
- import os
- import platform
- import subprocess
- import sys
- from typing import Any, Union
- def subs(cmd: Union[list[str], str]) -> str | None:
- """
- get data from commands that we need to run outside of python
- """
- try:
- stdout = subprocess.check_output(cmd) # noqa: S603
- return stdout.decode("utf-8", "replace").strip()
- except (OSError, subprocess.CalledProcessError):
- return None
- def get_data() -> dict[str, Any]:
- """
- returns a dict of various user environment data
- """
- env: dict[str, Any] = {}
- env["path"] = os.environ.get("PATH")
- env["sys_path"] = sys.path
- env["sys_exe"] = sys.executable
- env["sys_version"] = sys.version
- env["platform"] = platform.platform()
- # FIXME: which on Windows?
- if sys.platform == "win32":
- env["where"] = subs(["where", "jupyter"])
- env["which"] = None
- else:
- env["which"] = subs(["which", "-a", "jupyter"])
- env["where"] = None
- env["pip"] = subs([sys.executable, "-m", "pip", "list"])
- env["conda"] = subs(["conda", "list"])
- env["conda-env"] = subs(["conda", "env", "export"])
- return env
- def main() -> None:
- """
- print out useful info
- """
- # pylint: disable=superfluous-parens
- # args = get_args()
- if "_ARGCOMPLETE" in os.environ:
- # No arguments to complete, the script can be slow to run to completion,
- # so in case someone tries to complete jupyter troubleshoot just exit early
- return
- environment_data = get_data()
- print("$PATH:")
- for directory in environment_data["path"].split(os.pathsep):
- print(f"\t{directory}")
- print("\nsys.path:")
- for directory in environment_data["sys_path"]:
- print(f"\t{directory}")
- print("\nsys.executable:")
- print(f"\t{environment_data['sys_exe']}")
- print("\nsys.version:")
- if "\n" in environment_data["sys_version"]:
- for data in environment_data["sys_version"].split("\n"):
- print(f"\t{data}")
- else:
- print(f"\t{environment_data['sys_version']}")
- print("\nplatform.platform():")
- print(f"\t{environment_data['platform']}")
- if environment_data["which"]:
- print("\nwhich -a jupyter:")
- for line in environment_data["which"].split("\n"):
- print(f"\t{line}")
- if environment_data["where"]:
- print("\nwhere jupyter:")
- for line in environment_data["where"].split("\n"):
- print(f"\t{line}")
- if environment_data["pip"]:
- print("\npip list:")
- for package in environment_data["pip"].split("\n"):
- print(f"\t{package}")
- if environment_data["conda"]:
- print("\nconda list:")
- for package in environment_data["conda"].split("\n"):
- print(f"\t{package}")
- if environment_data["conda-env"]:
- print("\nconda env:")
- for package in environment_data["conda-env"].split("\n"):
- print(f"\t{package}")
- if __name__ == "__main__":
- main()
|