diff --git a/setup.py b/setup.py
index d3e271fd0..f8a73d032 100644
--- a/setup.py
+++ b/setup.py
@@ -152,16 +152,22 @@ def members_appended(*ds):
                 result[k].extend(v)
         return result
 
+    try:
+        import pkgconfig as pc
+    except ImportError:
+        print('Warning: can not import pkgconfig python package.')
+        pc = None
+
     crypto_ext_kwargs = members_appended(
         dict(sources=[crypto_ll_source, crypto_helpers]),
-        setup_crypto.crypto_ext_kwargs(),
-        setup_b2.b2_ext_kwargs(prefer_system_libb2),
+        setup_crypto.crypto_ext_kwargs(pc),
+        setup_b2.b2_ext_kwargs(pc, prefer_system_libb2),
     )
 
     compress_ext_kwargs = members_appended(
         dict(sources=[compress_source]),
-        setup_lz4.lz4_ext_kwargs(prefer_system_liblz4),
-        setup_zstd.zstd_ext_kwargs(prefer_system_libzstd, multithreaded=False, legacy=False),
+        setup_lz4.lz4_ext_kwargs(pc, prefer_system_liblz4),
+        setup_zstd.zstd_ext_kwargs(pc, prefer_system_libzstd, multithreaded=False, legacy=False),
     )
 
     ext_modules += [
diff --git a/setup_b2.py b/setup_b2.py
index 4b1f5ec8c..309cdb101 100644
--- a/setup_b2.py
+++ b/setup_b2.py
@@ -21,7 +21,7 @@ def multi_join(paths, *path_segments):
     return [os.path.join(*(path_segments + (path,))) for path in paths]
 
 
-def b2_ext_kwargs(prefer_system):
+def b2_ext_kwargs(pc, prefer_system):
     if prefer_system:
         system_prefix = os.environ.get('BORG_LIBB2_PREFIX')
         if system_prefix:
@@ -30,11 +30,9 @@ def b2_ext_kwargs(prefer_system):
                         library_dirs=[os.path.join(system_prefix, 'lib')],
                         libraries=['b2'])
 
-        import pkgconfig
-
-        if pkgconfig.installed('libb2', '>= 0.98.1'):
+        if pc and pc.installed('libb2', '>= 0.98.1'):
             print('Detected and preferring libb2 [via pkg-config]')
-            return pkgconfig.parse('libb2')
+            return pc.parse('libb2')
 
     print('Using bundled BLAKE2')
     sources = multi_join(b2_sources, bundled_path)
diff --git a/setup_crypto.py b/setup_crypto.py
index 6252c013e..b0971ff62 100644
--- a/setup_crypto.py
+++ b/setup_crypto.py
@@ -3,7 +3,7 @@
 import os
 
 
-def crypto_ext_kwargs():
+def crypto_ext_kwargs(pc):
     system_prefix = os.environ.get('BORG_OPENSSL_PREFIX')
     if system_prefix:
         print('Detected OpenSSL [via BORG_OPENSSL_PREFIX]')
@@ -11,10 +11,8 @@ def crypto_ext_kwargs():
                     library_dirs=[os.path.join(system_prefix, 'lib')],
                     libraries=['crypto'])
 
-    import pkgconfig
-
-    if pkgconfig.exists('libcrypto'):
+    if pc and pc.exists('libcrypto'):
         print('Detected OpenSSL [via pkg-config]')
-        return pkgconfig.parse('libcrypto')
+        return pc.parse('libcrypto')
 
     raise Exception('Could not find OpenSSL lib/headers, please set BORG_OPENSSL_PREFIX')
diff --git a/setup_lz4.py b/setup_lz4.py
index 574017688..b8b5f7dfb 100644
--- a/setup_lz4.py
+++ b/setup_lz4.py
@@ -21,7 +21,7 @@ def multi_join(paths, *path_segments):
     return [os.path.join(*(path_segments + (path,))) for path in paths]
 
 
-def lz4_ext_kwargs(prefer_system):
+def lz4_ext_kwargs(pc, prefer_system):
     if prefer_system:
         system_prefix = os.environ.get('BORG_LIBLZ4_PREFIX')
         if system_prefix:
@@ -30,11 +30,9 @@ def lz4_ext_kwargs(prefer_system):
                         library_dirs=[os.path.join(system_prefix, 'lib')],
                         libraries=['lz4'])
 
-        import pkgconfig
-
-        if pkgconfig.installed('liblz4', '>= 1.7.0'):
+        if pc and pc.installed('liblz4', '>= 1.7.0'):
             print('Detected and preferring liblz4 [via pkg-config]')
-            return pkgconfig.parse('liblz4')
+            return pc.parse('liblz4')
 
     print('Using bundled LZ4')
     sources = multi_join(lz4_sources, bundled_path)
diff --git a/setup_zstd.py b/setup_zstd.py
index 117aca0b7..050c72f79 100644
--- a/setup_zstd.py
+++ b/setup_zstd.py
@@ -68,7 +68,7 @@ def multi_join(paths, *path_segments):
     return [os.path.join(*(path_segments + (path,))) for path in paths]
 
 
-def zstd_ext_kwargs(prefer_system, multithreaded=False, legacy=False):
+def zstd_ext_kwargs(pc, prefer_system, multithreaded=False, legacy=False):
     if prefer_system:
         system_prefix = os.environ.get('BORG_LIBZSTD_PREFIX')
         if system_prefix:
@@ -77,11 +77,9 @@ def zstd_ext_kwargs(prefer_system, multithreaded=False, legacy=False):
                         library_dirs=[os.path.join(system_prefix, 'lib')],
                         libraries=['zstd'])
 
-        import pkgconfig
-
-        if pkgconfig.installed('libzstd', '>= 1.3.0'):
+        if pc and pc.installed('libzstd', '>= 1.3.0'):
             print('Detected and preferring libzstd [via pkg-config]')
-            return pkgconfig.parse('libzstd')
+            return pc.parse('libzstd')
 
     print('Using bundled ZSTD')
     sources = multi_join(zstd_sources, bundled_path)