setup.py 3.31 KB
Newer Older
Louis Martin's avatar
Louis Martin committed
1
#!/usr/bin/env python3
2
# Copyright (c) Facebook, Inc. and its affiliates.
Sergey Edunov's avatar
Sergey Edunov committed
3
#
4
5
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
Sergey Edunov's avatar
Sergey Edunov committed
6
7
8
9
10
11
12
13
14
15
16

from setuptools import setup, find_packages, Extension
import sys


if sys.version_info < (3,):
    sys.exit('Sorry, Python3 is required for fairseq.')

with open('README.md') as f:
    readme = f.read()

17
if sys.platform == 'darwin':
18
19
    extra_compile_args = ['-stdlib=libc++', '-O3']
    extra_link_args = ['-stdlib=libc++']
20
else:
21
22
23
    extra_compile_args = ['-std=c++11', '-O3']
    extra_link_args = ['-std=c++11']

Sergey Edunov's avatar
Sergey Edunov committed
24
25
26
27
28
29
bleu = Extension(
    'fairseq.libbleu',
    sources=[
        'fairseq/clib/libbleu/libbleu.cpp',
        'fairseq/clib/libbleu/module.cpp',
    ],
30
    extra_compile_args=extra_compile_args,
Sergey Edunov's avatar
Sergey Edunov committed
31
32
)

33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

def get_cython_modules():
    token_block_utils = Extension(
        "fairseq.data.token_block_utils_fast",
        ["fairseq/data/token_block_utils_fast.pyx"],
        extra_compile_args=extra_compile_args,
        extra_link_args=extra_link_args,
    )
    data_utils_fast = Extension(
        "fairseq.data.data_utils_fast",
        ["fairseq/data/data_utils_fast.pyx"],
        language="c++",
        extra_compile_args=extra_compile_args,
        extra_link_args=extra_link_args,
    )
    return [token_block_utils, data_utils_fast]


def my_build_ext(pars):
    """
    Delay loading of numpy headers.
    More details: https://stackoverflow.com/questions/54117786/add-numpy-get-include-argument-to-setuptools-without-preinstalled-numpy
    """
    from setuptools.command.build_ext import build_ext as _build_ext

    class build_ext(_build_ext):
        def finalize_options(self):
            _build_ext.finalize_options(self)
            __builtins__.__NUMPY_SETUP__ = False
            import numpy
            self.include_dirs.append(numpy.get_include())
    return build_ext(pars)

Sergey Edunov's avatar
Sergey Edunov committed
66
67
68

setup(
    name='fairseq',
Myle Ott's avatar
Myle Ott committed
69
    version='0.8.0',
Sergey Edunov's avatar
Sergey Edunov committed
70
    description='Facebook AI Research Sequence-to-Sequence Toolkit',
Myle Ott's avatar
Myle Ott committed
71
72
73
    url='https://github.com/pytorch/fairseq',
    classifiers=[
        'Intended Audience :: Science/Research',
74
        'License :: OSI Approved :: MIT License',
Bairen Yi's avatar
Bairen Yi committed
75
        'Programming Language :: Python :: 3.5',
Myle Ott's avatar
Myle Ott committed
76
77
78
        'Programming Language :: Python :: 3.6',
        'Topic :: Scientific/Engineering :: Artificial Intelligence',
    ],
Sergey Edunov's avatar
Sergey Edunov committed
79
    long_description=readme,
Myle Ott's avatar
Myle Ott committed
80
    long_description_content_type='text/markdown',
81
    setup_requires=[
82
        'numpy',
83
84
85
        'cython',
        'setuptools>=18.0',
    ],
Myle Ott's avatar
Myle Ott committed
86
87
    install_requires=[
        'cffi',
Myle Ott's avatar
Myle Ott committed
88
        'fastBPE',
Myle Ott's avatar
Myle Ott committed
89
        'numpy',
Myle Ott's avatar
Myle Ott committed
90
        'regex',
Myle Ott's avatar
Myle Ott committed
91
        'sacrebleu',
Myle Ott's avatar
Myle Ott committed
92
        'torch',
Myle Ott's avatar
Myle Ott committed
93
94
95
        'tqdm',
    ],
    packages=find_packages(exclude=['scripts', 'tests']),
96
    ext_modules=get_cython_modules() + [bleu],
Myle Ott's avatar
Myle Ott committed
97
    test_suite='tests',
Myle Ott's avatar
Myle Ott committed
98
99
    entry_points={
        'console_scripts': [
Myle Ott's avatar
Myle Ott committed
100
101
102
103
104
            'fairseq-eval-lm = fairseq_cli.eval_lm:cli_main',
            'fairseq-generate = fairseq_cli.generate:cli_main',
            'fairseq-interactive = fairseq_cli.interactive:cli_main',
            'fairseq-preprocess = fairseq_cli.preprocess:cli_main',
            'fairseq-score = fairseq_cli.score:main',
Myle Ott's avatar
Myle Ott committed
105
106
            'fairseq-train = fairseq_cli.train:cli_main',
            'fairseq-validate = fairseq_cli.validate:cli_main',
Myle Ott's avatar
Myle Ott committed
107
108
        ],
    },
109
    cmdclass={'build_ext': my_build_ext},
110
    zip_safe=False,
Sergey Edunov's avatar
Sergey Edunov committed
111
)