PyFLANN for python3: ModuleNotFoundError: No module named ‘index’

PyFLANN for python3: ModuleNotFoundError: No module named ‘index’

I have installed the pyFLANN library for Python 3.6.5 using:

pip install pyflann
Collecting pyflann
  Downloading https://files.pythonhosted.org/packages/d9/03/87c9a4c18506176635c10b901ed55eee9a2bcf560756704719590479f1f2/pyflann-1.6.14.tar.gz (7.1MB)
    100% |████████████████████████████████| 7.1MB 152kB/s
Building wheels for collected packages: pyflann
  Running setup.py bdist_wheel for pyflann ... done
  Stored in directory: C:\Users\azam_\AppData\Local\pip\Cache\wheels\5b\77\d6\39a95cf44089e47d1896f23c8fa927737525d51e033d4bdc6c
Successfully built pyflann
Installing collected packages: pyflann
Successfully installed pyflann-1.6.14

after installing, when I was trying to run a sample code given on their GitHub page:

from pyflann import *
import numpy as np

dataset = np.array(
    [[1., 1, 1, 2, 3],
     [10, 10, 10, 3, 2],
     [100, 100, 2, 30, 1]
     ])
testset = np.array(
    [[1., 1, 1, 1, 1],
     [90, 90, 10, 10, 1]
     ])
flann = FLANN()
result, dists = flann.nn(
    dataset, testset, 2, algorithm="kmeans", branching=32, iterations=7, checks=16)
print result
print dists

dataset = np.random.rand(10000, 128)
testset = np.random.rand(1000, 128)
flann = FLANN()
result, dists = flann.nn(
    dataset, testset, 5, algorithm="kmeans", branching=32, iterations=7, checks=16)
print result
print dists

I was getting the following error:

$ python pyflann_test.py
File "pyflann_test.py", line 16
    print result
               ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(result)?

after adding brackets to print statement, the updated code:

from pyflann import *
import numpy as np

dataset = np.array(
    [[1., 1, 1, 2, 3],
     [10, 10, 10, 3, 2],
     [100, 100, 2, 30, 1]
     ])
testset = np.array(
    [[1., 1, 1, 1, 1],
     [90, 90, 10, 10, 1]
     ])
flann = FLANN()
result, dists = flann.nn(
    dataset, testset, 2, algorithm="kmeans", branching=32, iterations=7, checks=16)
print (result)
print (dists)

dataset = np.random.rand(10000, 128)
testset = np.random.rand(1000, 128)
flann = FLANN()
result, dists = flann.nn(
    dataset, testset, 5, algorithm="kmeans", branching=32, iterations=7, checks=16)
print (result)
print (dists)

executing it again produces:

$ python pyflann_test.py
Traceback (most recent call last):
  File "pyflann_test.py", line 1, in <module>
    from pyflann import *
  File "C:\Users\azam_\Envs\py3\lib\site-packages\pyflann\__init__.py", line 27, in <module>
    from index import *
ModuleNotFoundError: No module named 'index'

The pyflann is actually compiled for python 2, so need to change some syntax errors in different files of installed pyflann directory in dist-packages of python3.

This site mentions almost all of the mistakes.

But the fastest method to convert pyflann to python3 compatible is using the following ($ sudo 2to3 -w <path to pyflann in python dist-packages> )command:

$ sudo 2to3 -w /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann
[sudo] password for azam: 
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
RefactoringTool: Skipping optional fixer: buffer
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
RefactoringTool: Skipping optional fixer: idioms
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
RefactoringTool: Skipping optional fixer: set_literal
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
RefactoringTool: Skipping optional fixer: ws_comma
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/__init__.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/__init__.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/__init__.py	(refactored)
@@ -24,9 +24,9 @@
 #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 #THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from index import *
-from io.dataset import load, save
+from .index import *
+from .io.dataset import load, save
 try:
-    from io.hdf5_dataset import load_range
+    from .io.hdf5_dataset import load_range
 except:
     pass
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/index.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/index.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/index.py	(refactored)
@@ -24,8 +24,8 @@
 #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 #THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from bindings.flann_ctypes import *
-from io.dataset import *
+from .bindings.flann_ctypes import *
+from .io.dataset import *
 import numpy.random as _rn
 
 
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/bindings/__init__.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/bindings/__init__.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/bindings/__init__.py	(refactored)
@@ -27,4 +27,4 @@
 #from pyflann import *
 #from pyflann_parameters import parameter_list, algorithm_names
 #from pyflann_parameters import centers_init_names, log_level_names
-from flann_ctypes import *
+from .flann_ctypes import *
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/bindings/flann_ctypes.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/bindings/flann_ctypes.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/bindings/flann_ctypes.py	(refactored)
@@ -50,7 +50,7 @@
         self.update(self._defaults_)
 
     def update(self, dict):
-        for k, v in dict.iteritems():
+        for k, v in dict.items():
             if k in self.__field_names:
                 setattr(self, k, self.__translate(k, v))
 
@@ -75,7 +75,7 @@
 
     def __translate_back(self, k, v):
         if k in self._translation_:
-            for tk, tv in self._translation_[k].iteritems():
+            for tk, tv in self._translation_[k].items():
                 if tv == v:
                     return tk
         return v
@@ -148,7 +148,7 @@
             try:
                 flannlib = cdll[os.path.join(root_dir, libdir, libname)]
                 return flannlib
-            except Exception, e:
+            except Exception as e:
                 pass
         tmp = os.path.dirname(root_dir)
         if tmp == root_dir:
@@ -198,7 +198,7 @@
 
 def define_functions(str):
     for type in type_mappings:
-        exec str % {'C': type[0], 'numpy': type[1]}
+        exec(str % {'C': type[0], 'numpy': type[1]})
 
 flann.build_index = {}
 define_functions(r"""
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/__init__.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/__init__.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/__init__.py	(refactored)
@@ -24,4 +24,4 @@
 #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 #THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from dataset import *
+from .dataset import *
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/binary_dataset.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/binary_dataset.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/binary_dataset.py	(refactored)
@@ -24,7 +24,7 @@
 #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 #THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import with_statement
+
 
 from pyflann.exceptions import FLANNException
 import numpy
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
root: Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/dat_dataset.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/dat_dataset.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/dat_dataset.py	(refactored)
@@ -24,7 +24,7 @@
 #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 #THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import with_statement
+
 
 from pyflann.exceptions import FLANNException
 import numpy
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/dataset.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/dataset.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/dataset.py	(refactored)
@@ -24,13 +24,13 @@
 #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 #THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import with_statement
+
 
 from pyflann.exceptions import FLANNException
-import binary_dataset
-import dat_dataset
-import npy_dataset
-import hdf5_dataset
+from . import binary_dataset
+from . import dat_dataset
+from . import npy_dataset
+from . import hdf5_dataset
 
 import os.path
 from numpy import float32
@@ -45,7 +45,7 @@
 
 def load(filename, rows = -1, cols = -1, dtype = float32, **kwargs):
     
-    for format in dataset_formats.values():
+    for format in list(dataset_formats.values()):
         if format.check(filename):
             return format.load(filename, rows, cols, dtype, **kwargs)
     raise FLANNException("Error: Unknown dataset format")
@@ -58,5 +58,5 @@
             format = extension[1:]
         handler = dataset_formats[format]
         handler.save(dataset, filename, **kwargs)
-    except Exception,e:
+    except Exception as e:
         raise FLANNException(e)
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/hdf5_dataset.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/hdf5_dataset.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/hdf5_dataset.py	(refactored)
@@ -24,14 +24,14 @@
 #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 #THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import with_statement
+
 
 from pyflann.exceptions import FLANNException
 import numpy
 have_h5py = True
 try:
     import h5py
-except Exception,e:
+except Exception as e:
     have_h5py = False
 
 if not have_h5py:
@@ -64,7 +64,7 @@
             h5file = h5py.File(filename)
             h5file.create_dataset(dataset_name, data=dataset)
             h5file.close()
-        except Exception,e:
+        except Exception as e:
             h5file.close()
             raise FLANNException(e)
 
@@ -77,12 +77,12 @@
             else:
                 dataset_name = 'dataset'
             
-            for node in h5file.keys():
+            for node in list(h5file.keys()):
                 if node == dataset_name:
                     data = numpy.array(h5file[node])
             h5file.close()
             return data
-        except Exception,e:
+        except Exception as e:
             h5file.close()
             raise FLANNException(e)
             
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/npy_dataset.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/npy_dataset.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/npy_dataset.py	(refactored)
@@ -24,7 +24,7 @@
 #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 #THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import with_statement
+
 
 from pyflann.exceptions import FLANNException
 import numpy
RefactoringTool: Refactored /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/util/weave_tools.py
--- /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/util/weave_tools.py	(original)
+++ /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/util/weave_tools.py	(refactored)
@@ -121,7 +121,7 @@
             defaults = [] if defaults==None else defaults
             if len(args) != len(defaults):
                 raise Exception("The %s function must have default values for all arguments"%name)
-            arg_tuples = zip(args,defaults) + list(varargs)
+            arg_tuples = list(zip(args,defaults)) + list(varargs)
             self.add_function(name,code,*arg_tuples)
             return func
         return decorate        
@@ -138,7 +138,7 @@
         defaults = [] if defaults==None else defaults
         if len(args) != len(defaults):
             raise Exception("The %s function must have default values for all arguments"%name)
-        vardict = dict(zip(args,defaults))
+        vardict = dict(list(zip(args,defaults)))
         self.extension.add_function(ext_tools.ext_function(name, code, args, local_dict = vardict))
         return func
         
@@ -165,7 +165,7 @@
         format = join([ s for (s,_,_) in members],'')
         self.__struct_dict = dict( (v for (_,v,_) in members) )
         self.__translation_dict = dict( ( (k[0],v) for (_,k,v) in members if v != None))
-        print self.__translation_dict
+        print(self.__translation_dict)
         self.__struct = struct.Struct(format)
         
         
RefactoringTool: Files that were modified:
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/__init__.py
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/index.py
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/bindings/__init__.py
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/bindings/flann_ctypes.py
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/__init__.py
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/binary_dataset.py
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/dat_dataset.py
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/dataset.py
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/hdf5_dataset.py
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/npy_dataset.py
RefactoringTool: /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/util/weave_tools.py
RefactoringTool: Warnings/messages while refactoring:
RefactoringTool: ### In file /home/azam/.virtualenvs/keras_py/lib/python3.5/site-packages/pyflann/io/binary_dataset.py ###
RefactoringTool: Line 65: could not convert: raise "No .meta file present, you must specify dataset rows, cols asd dtype"
RefactoringTool: Python 3 does not support string exceptions

after all, this executing the same file produces the expected results:

$ python pyflann_test.py 
[[0 1]
 [2 1]]
[[5.000e+00 2.480e+02]
 [6.640e+02 1.285e+04]]
[[3248 4024 4805 2569 5944]
 [2576  832 3174 8231 2910]
 [7631 8281 3689 8853 9344]
 ...
 [2195 6304 7359 4336 5607]
 [7553 2281 6094 9804 6834]
 [3443 7222 1290 9268 2465]]
[[15.12251162 15.17127961 16.2346509  16.46582042 16.89452732]
 [15.23944829 16.09247273 16.46303628 17.54092922 17.72544804]
 [16.82947424 17.77703272 17.86748326 18.48309253 19.26260551]
 ...
 [14.15228159 15.37001149 16.15817762 16.20372887 16.20940254]
 [14.36123099 14.66829362 15.51947857 16.54545765 16.79084565]
 [14.84465391 15.87923275 16.22655922 16.41113724 16.4808538 ]]

Download pyFlann for Python 3

Related Links:

Leave a Reply

Your email address will not be published.