diff --git a/flysystem.install b/flysystem.install
index 3ea19bf..2a7a748 100644
--- a/flysystem.install
+++ b/flysystem.install
@@ -11,6 +11,34 @@
 function flysystem_requirements($phase) {
   $requirements = [];
 
+  if ($phase !== 'runtime' && $phase !== 'install') {
+    return $requirements;
+  }
+
+  $dependencies = [
+    'League\Flysystem\Filesystem' => \Drupal::translation()->translate('Flysystem'),
+    'League\Flysystem\Cached\CachedAdapter' => \Drupal::translation()->translate('cache adapter'),
+    'League\Flysystem\Replicate\ReplicateAdapter' => \Drupal::translation()->translate('replicate adapter'),
+    'Twistor\FlysystemStreamWrapper' => \Drupal::translation()->translate('stream wrapper'),
+  ];
+
+  $missing = array_filter(array_map(function ($dependency) use ($dependencies) {
+    return class_exists($dependency) ? FALSE : $dependencies[$dependency];
+  }, array_keys($dependencies)));
+
+  // If dependencies are missing don't proceed since things are broken.
+  if ($missing) {
+    // @codeCoverageIgnoreStart
+    $requirements['flysystem_dependencies'] = [
+      'title' => \Drupal::translation()->translate('Flysystem'),
+      'description' => \Drupal::translation()->translate('Dependencies missing: @deps.', ['@deps' => implode(', ', $missing)]),
+      'severity' => REQUIREMENT_ERROR,
+    ];
+
+    return $requirements;
+    // @codeCoverageIgnoreEnd
+  }
+
   if ($phase !== 'runtime') {
     return $requirements;
   }
diff --git a/tests/src/Unit/InstallFunctionsTest.php b/tests/src/Unit/InstallFunctionsTest.php
index bf9828e..89c8110 100644
--- a/tests/src/Unit/InstallFunctionsTest.php
+++ b/tests/src/Unit/InstallFunctionsTest.php
@@ -48,6 +48,9 @@ class InstallFunctionsTest extends UnitTestCase {
       define('REQUIREMENT_ERROR', 2);
     }
 
+    $return = flysystem_requirements('update');
+    $this->assertSame(0, count($return));
+
     $return = flysystem_requirements('install');
     $this->assertSame(0, count($return));
 
