File: C:/Users/fred/anaconda3/Lib/site-packages/pyct/report.py
#!/usr/bin/env python
# Import and print the library version and filesystem location for each Python package or shell command specified
#
# bash usage: $ report numpy pandas python conda
# python usage: >>> from report import report; report("numpy","pandas","python","conda")
from __future__ import print_function
import os.path, importlib, subprocess, platform, sys
def report(*packages):
"""Import and print location and version information for specified Python packages"""
accepted_commands = ['python','conda']
for package in packages:
loc = "not installed in this environment"
ver = "unknown"
try:
module = importlib.import_module(package)
loc = os.path.dirname(module.__file__)
try:
ver = str(module.__version__)
except Exception:
pass
except (ImportError, ModuleNotFoundError):
if package in accepted_commands:
try:
# See if there is a command by that name and check its --version if so
try:
loc = subprocess.check_output('command -v {}'.format(package), shell=True).decode().splitlines()[0].strip()
except:
# .exe in case powershell (otherwise wouldn't need it)
loc = subprocess.check_output( 'where.exe {}'.format(package), shell=True).decode().splitlines()[0].strip()
out = ""
try:
out = subprocess.check_output([package, '--version'], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
out = e.output
# Assume first word in output with a period and digits is the version
for s in out.decode().split():
if '.' in s and str.isdigit(s[0]) and sum(str.isdigit(c) for c in s)>=2:
ver=s.strip()
break
except:
pass
elif package == 'system':
try:
ver = platform.platform(terse=True)
loc = "OS: " + platform.platform()
except Exception:
pass
else:
pass
print("{0:30} # {1}".format(package + "=" + ver,loc))
def main():
report(*(sys.argv[1:]))
if __name__ == "__main__":
main()