diff --git a/bin/c b/bin/c
index 6e3bd6e..fca46d4 100755
--- a/bin/c
+++ b/bin/c
@@ -13,14 +13,14 @@
 
 if [ ! -f $CLEAN.log ]; then
     git checkout $CLEAN
-    ./gyp_skia >/dev/null
+    python gyp_skia >/dev/null
     ninja -C out/Release nanobench
     out/Release/nanobench $@ --samples $SAMPLES -v 2> $CLEAN.log
 fi
 
 git checkout $BRANCH
-./gyp_skia >/dev/null
+python gyp_skia >/dev/null
 ninja -C out/Release nanobench
 out/Release/nanobench $@ --samples $SAMPLES -v 2> $BRANCH.log
 
-./bin/compare $CLEAN.log $BRANCH.log
+python bin/compare $CLEAN.log $BRANCH.log
diff --git a/bin/compare b/bin/compare
index 82f85d5..95d4100 100755
--- a/bin/compare
+++ b/bin/compare
@@ -1,10 +1,13 @@
 #!/usr/bin/env python
 
 import argparse
-import numpy
 import sys
-from scipy.stats import mannwhitneyu
-from scipy.stats import sem
+
+have_scipy = True
+try:
+    import scipy.stats
+except:
+    have_scipy = False
 
 SIGNIFICANCE_THRESHOLD = 0.0001
 
@@ -32,15 +35,17 @@
 
 common = set(a.keys()).intersection(b.keys())
 
+def mean(xs):
+    return sum(xs) / len(xs)
+
 ps = []
 for key in common:
-    _, p = mannwhitneyu(a[key], b[key])    # Non-parametric t-test.  Doesn't assume normal dist.
-    if args.use_means:
-        am, bm = numpy.mean(a[key]), numpy.mean(b[key])
-        asem, bsem = sem(a[key]), sem(b[key])
-    else:
-        am, bm = min(a[key]), min(b[key])
-        asem, bsem = 0, 0
+    p, asem, bsem = 0, 0, 0
+    m = mean if args.use_means else min
+    am, bm = m(a[key]), m(b[key])
+    if have_scipy:
+        _, p = scipy.stats.mannwhitneyu(a[key], b[key])
+        asem, bsem = scipy.stats.sem(a[key]), sem(b[key])
     ps.append((bm/am, p, key, am, bm, asem, bsem))
 ps.sort(reverse=True)
 
