spaCy/setup.py

139 lines
4.2 KiB
Python
Raw Normal View History

2014-07-05 22:49:34 +04:00
#!/usr/bin/env python
2015-01-04 21:30:56 +03:00
import subprocess
from setuptools import setup
from glob import glob
2014-07-05 22:49:34 +04:00
import sys
import os
from os import path
2015-01-04 21:30:56 +03:00
from os.path import splitext
2014-07-05 22:49:34 +04:00
import shutil
2015-01-04 21:30:56 +03:00
from setuptools import Extension
from distutils import sysconfig
import platform
2015-01-17 08:19:54 +03:00
# PyPy --- NB! PyPy doesn't really work, it segfaults all over the place. But,
# this is necessary to get it compile.
# We have to resort to monkey-patching to set the compiler, because pypy broke
# all the everything.
2015-01-06 05:05:43 +03:00
pre_patch_customize_compiler = sysconfig.customize_compiler
def my_customize_compiler(compiler):
2015-01-06 05:05:43 +03:00
pre_patch_customize_compiler(compiler)
compiler.compiler_cxx = ['c++']
if platform.python_implementation() == 'PyPy':
sysconfig.customize_compiler = my_customize_compiler
2015-01-03 13:02:10 +03:00
2015-01-25 06:49:10 +03:00
#def install_headers():
# dest_dir = path.join(sys.prefix, 'include', 'murmurhash')
# if not path.exists(dest_dir):
# shutil.copytree('murmurhash/headers/murmurhash', dest_dir)
#
# dest_dir = path.join(sys.prefix, 'include', 'numpy')
2015-01-17 08:19:54 +03:00
includes = ['.', path.join(sys.prefix, 'include')]
2015-01-25 06:49:10 +03:00
try:
import numpy
numpy_headers = path.join(numpy.get_include(), 'numpy')
shutil.copytree(numpy_headers, path.join(sys.prefix, 'include', 'numpy'))
2015-01-25 06:49:10 +03:00
except ImportError:
pass
except OSError:
pass
2015-01-25 06:49:10 +03:00
2014-07-05 22:49:34 +04:00
def clean(ext):
2015-01-03 13:02:10 +03:00
for src in ext.sources:
if src.endswith('.c') or src.endswith('cpp'):
so = src.rsplit('.', 1)[0] + '.so'
html = src.rsplit('.', 1)[0] + '.html'
2014-07-05 22:49:34 +04:00
if os.path.exists(so):
os.unlink(so)
if os.path.exists(html):
os.unlink(html)
2015-01-04 21:30:56 +03:00
def name_to_path(mod_name, ext):
return '%s.%s' % (mod_name.replace('.', '/'), ext)
2015-01-04 21:30:56 +03:00
def c_ext(mod_name, language, includes, compile_args):
mod_path = name_to_path(mod_name, language)
return Extension(mod_name, [mod_path], include_dirs=includes,
extra_compile_args=compile_args, extra_link_args=compile_args)
2015-01-28 06:00:20 +03:00
def cython_exts(mod_names, language, includes, compile_args):
2015-01-04 21:30:56 +03:00
import Cython.Distutils
import Cython.Build
if language == 'cpp':
language = 'c++'
2015-01-28 06:00:20 +03:00
exts = []
for mod_name in mod_names:
mod_path = mod_name.replace('.', '/') + '.pyx'
e = Extension(mod_name, [mod_path], language=language, include_dirs=includes,
extra_compile_args=compile_args)
exts.append(e)
return Cython.Build.cythonize(exts)
2015-01-03 13:02:10 +03:00
2015-01-04 21:30:56 +03:00
def run_setup(exts):
setup(
name='spacy',
packages=['spacy', 'spacy.en', 'spacy.syntax'],
description="Industrial-strength NLP",
author='Matthew Honnibal',
author_email='honnibal@gmail.com',
2015-02-01 10:32:01 +03:00
version='0.40',
2015-01-04 21:30:56 +03:00
url="http://honnibal.github.io/spaCy/",
package_data={"spacy": ["*.pxd"],
"spacy.en": ["*.pxd", "data/pos/*",
"data/wordnet/*", "data/tokenizer/*",
"data/vocab/lexemes.bin",
"data/vocab/strings.txt"],
2015-01-04 21:30:56 +03:00
"spacy.syntax": ["*.pxd"]},
ext_modules=exts,
license="Dual: Commercial or AGPL",
2015-02-01 09:04:59 +03:00
install_requires=['numpy', 'murmurhash', 'cymem >= 1.11', 'preshed', 'thinc',
2015-02-01 08:24:50 +03:00
"unidecode", 'wget', 'plac', 'six'],
2015-01-04 21:30:56 +03:00
setup_requires=["headers_workaround"],
)
import headers_workaround
headers_workaround.fix_venv_pypy_include()
headers_workaround.install_headers('murmurhash')
2015-01-17 08:19:54 +03:00
headers_workaround.install_headers('numpy')
2015-01-04 21:30:56 +03:00
def main(modules, is_pypy):
language = "cpp"
includes = ['.', path.join(sys.prefix, 'include')]
compile_args = ['-O3']
2015-01-28 06:00:20 +03:00
if use_cython:
exts = cython_exts(modules, language, includes, compile_args)
else:
exts = [c_ext(mn, language, includes, compile_args) for mn in modules]
2015-01-04 21:30:56 +03:00
run_setup(exts)
2015-01-25 08:32:48 +03:00
MOD_NAMES = ['spacy.parts_of_speech', 'spacy.strings',
'spacy.lexeme', 'spacy.vocab', 'spacy.tokens', 'spacy.morphology',
2015-01-04 21:30:56 +03:00
'spacy._ml', 'spacy.tokenizer', 'spacy.en.attrs',
'spacy.en.pos', 'spacy.syntax.parser', 'spacy.syntax._state',
2015-01-05 09:55:15 +03:00
'spacy.syntax.arc_eager', 'spacy.syntax._parse_features',
'spacy.orth']
2015-01-04 21:30:56 +03:00
if __name__ == '__main__':
use_cython = sys.argv[1] == 'build_ext'
main(MOD_NAMES, use_cython)