kayzhu / LSHash

A fast Python implementation of locality sensitive hashing.
MIT License
660 stars 158 forks source link

Fix `pip install lshash` for python3 #18

Open hobson opened 7 years ago

hobson commented 7 years ago

Uses PyScaffolding to add a setup.cfg file and eliminate __author__, __version__ and other constants from the __init__.py file so that setup.py doesn't have to import lshash before it has been installed.

In my python3 virtualenv on a Ubuntu 15.04 pip install lshash fails on import lshash in setup.py with this traceback:

$ pip install lshash
Collecting lshash
  Downloading lshash-0.0.4dev.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-daf7w8vx/lshash/setup.py", line 3, in <module>
        import lshash
      File "/tmp/pip-build-daf7w8vx/lshash/lshash/__init__.py", line 12, in <module>
        from lshash import LSHash
    ImportError: cannot import name 'LSHash'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-daf7w8vx/lshash/
phdowling commented 7 years ago

Can this be merged? Seems very useful to make this installable under python 3

hobson commented 7 years ago

This latest version is compatible with Python 2.7+ and 3.5+ I will add an lshash3 to pypi while we wait for this project to fix the official pypi package LSHash.

HasanBank commented 4 years ago

So how can we install lshash to python 3 environment? I still get errors. I tried both of lshash3 and lshash3 with using pip3. As following repo readme doc and doing pip install lshash still affects only ptyhon2 environment in my case.

rdooley commented 4 years ago

Can you post the output of which pip ? If you are trying to install to the system python3 you can install with pip3

HasanBank commented 4 years ago

python3

Normal pip install lshash works but it installs to python 2 as a matter of course.

loretoparisi commented 4 years ago

@hobson I have tried lshash3 but I get an error anywas of on Python 3.7

pip install lshash3
Collecting lshash3
  Downloading https://files.pythonhosted.org/packages/51/a7/825799ea4c52ff477aae56f08b172016c434cd0264cbdd9cd7d82895bfe4/lshash3-0.0.8.tar.gz
Collecting bitarray
  Downloading https://files.pythonhosted.org/packages/3d/78/99528059e42f199910df89bd0ad8d9238f41d0499b506e0b3174340075ea/bitarray-1.2.1.tar.gz (48kB)
     |████████████████████████████████| 51kB 749kB/s 
Requirement already satisfied: numpy in /usr/local/lib/python3.7/site-packages (from lshash3) (1.18.4)
Building wheels for collected packages: lshash3, bitarray
  Building wheel for lshash3 (setup.py) ... done
  Created wheel for lshash3: filename=lshash3-0.0.8-py2.py3-none-any.whl size=10138 sha256=54282f467d07e216882d2006280fe04daee5803ef47ee537af9d5eec67eecc7e
  Stored in directory: /root/.cache/pip/wheels/30/7f/09/f8d846b30660911ca453e60d71af991bd8a506e804a7df6100
  Building wheel for bitarray (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-r4o72zc5/bitarray/setup.py'"'"'; __file__='"'"'/tmp/pip-install-r4o72zc5/bitarray/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-asj3oehx --python-tag cp37
       cwd: /tmp/pip-install-r4o72zc5/bitarray/
  Complete output (17 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.7
  creating build/lib.linux-x86_64-3.7/bitarray
  copying bitarray/test_bitarray.py -> build/lib.linux-x86_64-3.7/bitarray
  copying bitarray/util.py -> build/lib.linux-x86_64-3.7/bitarray
  copying bitarray/test_util.py -> build/lib.linux-x86_64-3.7/bitarray
  copying bitarray/__init__.py -> build/lib.linux-x86_64-3.7/bitarray
  running build_ext
  building 'bitarray._bitarray' extension
  creating build/temp.linux-x86_64-3.7
  creating build/temp.linux-x86_64-3.7/bitarray
  gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/include/python3.7m -c bitarray/_bitarray.c -o build/temp.linux-x86_64-3.7/bitarray/_bitarray.o
  unable to execute 'gcc': No such file or directory
  error: command 'gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for bitarray
  Running setup.py clean for bitarray
Successfully built lshash3
Failed to build bitarray
Installing collected packages: bitarray, lshash3
    Running setup.py install for bitarray ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-r4o72zc5/bitarray/setup.py'"'"'; __file__='"'"'/tmp/pip-install-r4o72zc5/bitarray/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-110ib2x9/install-record.txt --single-version-externally-managed --compile
         cwd: /tmp/pip-install-r4o72zc5/bitarray/
    Complete output (17 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.7
    creating build/lib.linux-x86_64-3.7/bitarray
    copying bitarray/test_bitarray.py -> build/lib.linux-x86_64-3.7/bitarray
    copying bitarray/util.py -> build/lib.linux-x86_64-3.7/bitarray
    copying bitarray/test_util.py -> build/lib.linux-x86_64-3.7/bitarray
    copying bitarray/__init__.py -> build/lib.linux-x86_64-3.7/bitarray
    running build_ext
    building 'bitarray._bitarray' extension
    creating build/temp.linux-x86_64-3.7
    creating build/temp.linux-x86_64-3.7/bitarray
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/usr/local/include/python3.7m -c bitarray/_bitarray.c -o build/temp.linux-x86_64-3.7/bitarray/_bitarray.o
    unable to execute 'gcc': No such file or directory
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-r4o72zc5/bitarray/setup.py'"'"'; __file__='"'"'/tmp/pip-install-r4o72zc5/bitarray/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-110ib2x9/install-record.txt --single-version-externally-managed --compile Check the logs for full command output.
WARNING: You are using pip version 19.3; however, version 20.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
loretoparisi commented 4 years ago

[UPDATE] My fault, I was missing some essential

root@584e172afc7b:/app# pip install lshash3
Processing /root/.cache/pip/wheels/30/7f/09/f8d846b30660911ca453e60d71af991bd8a506e804a7df6100/lshash3-0.0.8-py2.py3-none-any.whl
Requirement already satisfied: numpy in /usr/local/lib/python3.7/site-packages (from lshash3) (1.18.4)
Collecting bitarray
  Using cached https://files.pythonhosted.org/packages/3d/78/99528059e42f199910df89bd0ad8d9238f41d0499b506e0b3174340075ea/bitarray-1.2.1.tar.gz
Building wheels for collected packages: bitarray
  Building wheel for bitarray (setup.py) ... done
  Created wheel for bitarray: filename=bitarray-1.2.1-cp37-cp37m-linux_x86_64.whl size=166467 sha256=2851409bed14aa9e2dcbd8b3a1c0fe1085ac6d9356a8b77a2d428f785d4ca288
  Stored in directory: /root/.cache/pip/wheels/8e/4f/42/90d76aca9f4a7420c8c82fe15ed949777ab3fafe9fc1d705b3
Successfully built bitarray
Installing collected packages: bitarray, lshash3
Successfully installed bitarray-1.2.1 lshash3-0.0.8

it worked after adding

RUN apt-get update && apt-get install -y --no-install-recommends \
    software-properties-common \
    build-essential

to my Dockerfile

loretoparisi commented 4 years ago

@hobson Not sure why but I was able to build lshash3-0.0.8.tar.gz in (/usr/local/lib/python3.7/site-packages/lshash/, but when I do import I get

Traceback (most recent call last):
  File "test_clustering_lshash.py", line 10, in <module>
    from lshash import LSHash
ImportError: cannot import name 'LSHash' from 'lshash' (/usr/local/lib/python3.7/site-packages/lshash/__init__.py)

I can see the class LSHash in file /usr/local/lib/python3.7/site-packages/lshash/lshash.py

loretoparisi commented 4 years ago

[UPDATE] For whom comes to this issue, I have fixed it for Python 3.7.7. The fixed package is available here.

p-venkatesh commented 4 years ago
Screenshot 2020-08-07 at 10 03 00 AM

Here I am not able to import what to do, and how to import this actually?

loretoparisi commented 4 years ago

@p-venkatesh I have deployed a fixed and enhanced version of this package to pip here lshashpy3