troubleshoot.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/usr/bin/env python
  2. """
  3. display environment information that isfrequently
  4. used to troubleshoot installations of Jupyter or IPython
  5. """
  6. # import argparse
  7. import os
  8. import platform
  9. import subprocess
  10. import sys
  11. # def get_args():
  12. # """
  13. # TODO: output in JSON or xml? maybe?
  14. # """
  15. # pass
  16. def subs(cmd):
  17. """
  18. get data from commands that we need to run outside of python
  19. """
  20. try:
  21. stdout = subprocess.check_output(cmd)
  22. return stdout.decode('utf-8', 'replace').strip()
  23. except (OSError, subprocess.CalledProcessError):
  24. return None
  25. def get_data():
  26. """
  27. returns a dict of various user environment data
  28. """
  29. env = {}
  30. env['path'] = os.environ.get('PATH')
  31. env['sys_path'] = sys.path
  32. env['sys_exe'] = sys.executable
  33. env['sys_version'] = sys.version
  34. env['platform'] = platform.platform()
  35. # FIXME: which on Windows?
  36. if sys.platform == 'win32':
  37. env['where'] = subs(['where', 'jupyter'])
  38. env['which'] = None
  39. else:
  40. env['which'] = subs(['which', '-a', 'jupyter'])
  41. env['where'] = None
  42. env['pip'] = subs([sys.executable, '-m', 'pip', 'list'])
  43. env['conda'] = subs(['conda', 'list'])
  44. return env
  45. def main():
  46. """
  47. print out useful info
  48. """
  49. #pylint: disable=superfluous-parens
  50. # args = get_args()
  51. environment_data = get_data()
  52. print('$PATH:')
  53. for directory in environment_data['path'].split(os.pathsep):
  54. print('\t' + directory)
  55. print('\n' + 'sys.path:')
  56. for directory in environment_data['sys_path']:
  57. print('\t' + directory)
  58. print('\n' + 'sys.executable:')
  59. print('\t' + environment_data['sys_exe'])
  60. print('\n' + 'sys.version:')
  61. if '\n' in environment_data['sys_version']:
  62. for data in environment_data['sys_version'].split('\n'):
  63. print('\t' + data)
  64. else:
  65. print('\t' + environment_data['sys_version'])
  66. print('\n' + 'platform.platform():')
  67. print('\t' + environment_data['platform'])
  68. if environment_data['which']:
  69. print('\n' + 'which -a jupyter:')
  70. for line in environment_data['which'].split('\n'):
  71. print('\t' + line)
  72. if environment_data['where']:
  73. print('\n' + 'where jupyter:')
  74. for line in environment_data['where'].split('\n'):
  75. print('\t' + line)
  76. if environment_data['pip']:
  77. print('\n' + 'pip list:')
  78. for package in environment_data['pip'].split('\n'):
  79. print('\t' + package)
  80. if environment_data['conda']:
  81. print('\n' + 'conda list:')
  82. for package in environment_data['conda'].split('\n'):
  83. print('\t' + package)
  84. if __name__ == '__main__':
  85. main()