Python 3 support
mruegenberg opened this issue ยท 8 comments
Hi,
I'm getting some errors when using Python 3 (3.4.3) (and installing from pip, pyflann 1.6.12).
-
I'm getting import errors due to relative imports. The solution is to replace various
from foo import *
withfrom .foo import *
.
See also here
(This should also work in Python 2.)specifically:
- bindings/init.py
- the pyflann imports in index.py
- both imports in init.py
- io/init.py
- the
_dataset
imports in io/dataset.py need to be relative as well, e.gfrom . import binary_dataset
-
after fixing these, I get invalid syntax in find_ctypes.py, line 151. The reason is that the
except Exception, e
syntax was replaced byexcept Exception as e:
.
In this case, it could just beexcept Exception:
-
same in io/dataset.py, line 61 and hdf5_dataset, line 34+67
-
in flann_ctypes, line 201, the
exec
call needs brackets -
Python 3 no longer contains
dict.iteritems
and should be replaced by dict.items (in flann_ctypes, l.53 and 78)
(Not sure if this is the right place for these issues, I just followed the pip package to its source.)
Some additional errors which I'm not sure are the fault of Python 3:
- I get an error about flann_parameters missing when __del is called. Apparently, they are deleted before the del call?
With these fixes, pyflann seems to work.
Thank you so much for this! There's also another Exception in hdf5_dataset in line 85 that needs a syntax fix
I run sudo 2to3 -w [pyflann directory in dist-packages] and worked.
I tried following the instructions above, but I still got an error.
ArgumentError: argument 9: <class 'TypeError'>: expected LP_FLANNParameters instance instead of LP_FLANNParameters
In the end, jimkon's solution, however, worked fine. I had to switch to linux to run it obviously, but I can now run pyflann in windows after copying the modified files back over to my windows dist-packages folder.
It would be helpful to others I imagine if you could open up the Python3 branch of this so others could just install those files directly.
@jimkon's solution works for me on OSX (10.14.4) with Python 3.7.4. I installed via pip, and then needed to specify an exception type for line 65 of binary_dataset.py:
63. else:
64. if rows==-1 or cols==-1:
65. # raise "No .meta file present, you must specify dataset rows, cols asd dtype")
66. raise ValueError("No .meta file present, you must specify dataset rows, cols asd dtype")
I followed the instructions but I am getting this error
raise ImportError('Cannot load dynamic library. Did you compile FLANN?') ImportError: Cannot load dynamic library. Did you compile FLANN?
I followed the instructions but I am getting this error
raise ImportError('Cannot load dynamic library. Did you compile FLANN?') ImportError: Cannot load dynamic library. Did you compile FLANN?
@abdor95 I also got this error. After some debug I found the exact error for me:
dlopen(.../pyflann/lib/python3.9/site-packages/pyflann/lib/darwin/libflann.dylib, 0x0006): tried: '.../pyflann/lib/darwin/libflann.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64'))
I am running on a new M chip macbook. If you had the same issue and found a solution let me know. I am going to build my project on an old intel macbook for now and look at migrating later.
I followed the instructions but I am getting this error
raise ImportError('Cannot load dynamic library. Did you compile FLANN?') ImportError: Cannot load dynamic library. Did you compile FLANN?
@abdor95 I also got this error. After some debug I found the exact error for me: dlopen(.../pyflann/lib/python3.9/site-packages/pyflann/lib/darwin/libflann.dylib, 0x0006): tried: '.../pyflann/lib/darwin/libflann.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64'))
I am running on a new M chip macbook. If you had the same issue and found a solution let me know. I am going to build my project on an old intel macbook for now and look at migrating later.
Hi, Do you happen to find a solution for the M chip issue
This is old news, but I posted a solution to ^ here:
https://github.com/ddarmon/sidpy/#installation-on-arm-based-macs