diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm
index b3723d4069618527fda01b0d203f563099a40bc7..2e8f7c133192b2f0f398b4586ee288a5fc9787af 100644
--- a/gnu/packages/graph.scm
+++ b/gnu/packages/graph.scm
@@ -22,6 +22,7 @@ (define-module (gnu packages graph)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
@@ -42,6 +43,7 @@ (define-module (gnu packages graph)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages statistics)
+  #:use-module (gnu packages swig)
   #:use-module (gnu packages time)
   #:use-module (gnu packages xml))
 
@@ -322,3 +324,51 @@ (define-public faiss
 vectors of any size, up to ones that possibly do not fit in RAM.  It also
 contains supporting code for evaluation and parameter tuning.")
     (license license:bsd-3)))
+
+(define-public python-faiss
+  (package (inherit faiss)
+    (name "python-faiss")
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "python") #t))
+         (add-after 'chdir 'build-swig
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-output-to-file "../makefile.inc"
+               (lambda ()
+                 (let ((python-version ,(version-major+minor (package-version python))))
+                   (format #t "\
+PYTHONCFLAGS =-I~a/include/python~am/ -I~a/lib/python~a/site-packages/numpy/core/include
+LIBS = -lpython~am -lfaiss
+SHAREDFLAGS = -shared -fopenmp
+CXXFLAGS = -fpermissive -std=c++11 -fopenmp -fPIC
+CPUFLAGS = ~{~a ~}~%"
+                           (assoc-ref inputs "python*") python-version
+                           (assoc-ref inputs "python-numpy") python-version
+                           python-version
+                           (cons "-mpopcnt"
+                                 (list ,@(let ((system (or (%current-target-system)
+                                                           (%current-system))))
+                                           (cond
+                                            ((string-prefix? "x86_64" system)
+                                             '("-mavx" "-msse2"))
+                                            ((string-prefix? "i686" system)
+                                             '("-msse2"))
+                                            (else
+                                             '())))))))))
+             (substitute* "Makefile"
+               (("../libfaiss.a") ""))
+             (invoke "make" "cpu"))))))
+    (inputs
+     `(("faiss" ,faiss)
+       ("openblas" ,openblas)
+       ("python*" ,python)
+       ("swig" ,swig)))
+    (propagated-inputs
+     `(("python-matplotlib" ,python-matplotlib)
+       ("python-numpy" ,python-numpy)))
+    (description "Faiss is a library for efficient similarity search and
+clustering of dense vectors.  This package provides Python bindings to the
+Faiss library.")))