17
votes

After searching for days I'm about ready to give up finding precompiled binaries for Python 2.7 (Windows 64-bit) of the Python Levenshtein library, so not I'm attempting to compile it myself. I've installed the most recent version of MinGW32 (version 0.5-beta-20120426-1) and set it as the default compiler in distutils.

Here we go:

C:\Users\tomas>pip install python-levenshtein
Downloading/unpacking python-levenshtein
  Running setup.py egg_info for package python-levenshtein

    warning: no files found matching '*' under directory 'docs'
    warning: no previously-included files matching '*pyc' found anywhere in distribution
    warning: no previously-included files matching '.project' found anywhere in distribution
    warning: no previously-included files matching '.pydevproject' found anywhere in distribution
Requirement already satisfied (use --upgrade to upgrade): setuptools in c:\python27\lib\site-packages\setuptools-0.6c11-py2.7.egg (from python-levenshtein)
Installing collected packages: python-levenshtein
  Running setup.py install for python-levenshtein
    building 'Levenshtein' extension
    C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python27\include -IC:\Python27\PC -c Levenshtein.c -o build\temp.win-amd64-2.7\Release\levenshtein.o
    cc1.exe: error: unrecognized command line option '-mno-cygwin'
    error: command 'gcc' failed with exit status 1
    Complete output from command C:\Python27\python.exe -c "import setuptools;__file__='c:\\users\\tomas\\appdata\\local\\temp\\pip-build\\python-levenshtein\\setup.py';exec(compile(open(__file__).rea
d().replace('\r\n', '\n'), __file__, 'exec'))" install --record c:\users\tomas\appdata\local\temp\pip-7txyhp-record\install-record.txt --single-version-externally-managed:
    running install

running build

running build_ext

building 'Levenshtein' extension

C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python27\include -IC:\Python27\PC -c Levenshtein.c -o build\temp.win-amd64-2.7\Release\levenshtein.o

cc1.exe: error: unrecognized command line option '-mno-cygwin'

error: command 'gcc' failed with exit status 1

And now I'm stuck. I'm assuming that the -mno-cygwin option is outdated and no longer valid for the version of gcc that I have. If that is the case, I still have no clue how to fix that.

Thanks for any help anybody can offer on this issue.


EDIT:

I ran the compile line manually after removing the bad option:

C:\MinGW\bin\gcc.exe -mdll -O -Wall -IC:\Python27\include -IC:\Python27\PC -c Levenshtein.c -o build\temp.win-amd64-2.7\Release\levenshtein.o

Which successfully provided levenshtein.o in the build folder, but when I try to run python setup.py install then it just tries to build again and fails. Where can I remove -mno-cygwin? I assume it's somewhere in the source of distutils but I can't find it.

7
yeah ive spent hours mostly unsuccessfully trying to compile python packages that are missing "varsal.bat" or whatever ,... trying to target different compilers (mingw/cygwin) .... really there should be a better way to compile these on windows :/Joran Beasley
Are you sure difflib is not enough?Oleh Prypin
@BlaXpirit: It might come to that, but for now I'd prefer to avoid rewriting code and unit tests.Hubro
@cgohlke: That page is a gold-mine.Hubro
lol I swear i had problems even after installing mvs2008 ... but i just retried it and easy install worked fine for python-Levenshtein after i installed Visual C++ 2008 ....Joran Beasley

7 Answers

12
votes

download vcsetup.exe from http://www.microsoft.com/en-us/download/details.aspx?id=6506 (sorry this link is now broken it was for VC++ 2008 ... )

run it

after it finishes open your command.exe

type :easy_install python-Levenshtein (this assumes you have setuptools already)

sit back and let it install

done

27
votes

if you use Anaconda, try:

conda install -c conda-forge python-levenshtein
18
votes
7
votes

How to install python-Levenshtein/fuzzywuzzy on Windows 10 64 bit:

  1. Open a DOS window.

  2. C:\Users\username> pip install fuzzywuzzy

  3. C:\Users\username> pip install python-levenshtein

    If you encountered the following error:

    ERROR: Setup script exited with error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/down
    

    the solution is:

    1. From python Levenshtein wheels: https://www.lfd.uci.edu/~gohlke/pythonlibs/#python-levenshtein, download the relevant .whl: python_Levenshtein-0.12.0-cp37-cp37m-win_amd64.whl

    2. Create a wheels directory (or whatever name you like) under the Python37 directory: C:\Users\username\AppData\Local\Programs\Python\Python37\wheels

    3. Copy or move the python_Levenshtein-0.12.0-cp37-cp37m-win_amd64.whl file from the download folder to the wheels folder.

    4. Use NotePad to create a .bat file in Python37 directory, C:\Users\username\AppData\Local\Programs\Python\Python37\pip_install_python-levenshtein.bat with the following lines (assuming C:\Users\username\AppData\Local\Programs\Python\Python37\python.exe is the root directory for Python.exe):

      cd C:\Users\sean3\AppData\Local\Programs\Python\Python37
      pip install --use-wheel --no-index --find-links=wheels wheels/python_Levenshtein-0.12.0-cp37-cp37m-win_amd64.whl
      
    5. Run pip_install_python-levenshtein.bat:

      C:\Users\firstname.lastname\AppData\Local\Programs\Python\Python37> pip_install_python-levenshtein.bat >> output1.txt
      C:\Users\firstname.lastname> pip install fuzzywuzzy
      

      OUTPUT: Successfully installed python-Levenshtein-0.12.0

6
votes

I tried all the methods here and nothing worked for my Windows 10. In the end, I found this library python-Levenshtein-wheels which is "pip-able" on Windows.

pip install python-Levenshtein-wheels

After this just use Levenshtein as usual

import Levenshtein
Levenshtein.distance('It works at last', 'Well it works at last')

UPDATE:

The library rapidfuzz provides even some more ratios built upon Levenshtein metric. Just pip install rapidfuzz. You can use them depending on your use cases. This an example

from rapidfuzz import fuzz

fuzz.ratio("fuzzy wuzzy was a bear", "wuzzy fuzzy was a bear")
# 90.90908813476562
fuzz.token_sort_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")
# 83.8709716796875

hth

2
votes

For the answer by @Laurenz Albe this helped me as you must delete the "--use-wheel" Docker: no such option: --use-wheel

output - Successfully installed python-Levenshtein-0.12.0
0
votes

If you having Conda Virtual Environment

conda install -n virtualEnvironmentName python-levenshtein