setup.py 2.97 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

from setuptools import setup, find_packages, Extension
import sys


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

Myle Ott's avatar
Myle Ott committed
14

Sergey Edunov's avatar
Sergey Edunov committed
15
16
17
with open('README.md') as f:
    readme = f.read()

Myle Ott's avatar
Myle Ott committed
18

19
if sys.platform == 'darwin':
20
    extra_compile_args = ['-stdlib=libc++', '-O3']
21
else:
22
    extra_compile_args = ['-std=c++11', '-O3']
Sergey Edunov's avatar
Sergey Edunov committed
23

24

25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class NumpyExtension(Extension):
    """Source: https://stackoverflow.com/a/54128391"""

    def __init__(self, *args, **kwargs):
        self.__include_dirs = []
        super().__init__(*args, **kwargs)

    @property
    def include_dirs(self):
        import numpy
        return self.__include_dirs + [numpy.get_include()]

    @include_dirs.setter
    def include_dirs(self, dirs):
        self.__include_dirs = dirs


Myle Ott's avatar
Myle Ott committed
42
43
44
45
46
47
48
extensions = [
    Extension(
        'fairseq.libbleu',
        sources=[
            'fairseq/clib/libbleu/libbleu.cpp',
            'fairseq/clib/libbleu/module.cpp',
        ],
49
        extra_compile_args=extra_compile_args,
Myle Ott's avatar
Myle Ott committed
50
    ),
51
    NumpyExtension(
Myle Ott's avatar
Myle Ott committed
52
53
54
        'fairseq.data.data_utils_fast',
        sources=['fairseq/data/data_utils_fast.pyx'],
        language='c++',
55
        extra_compile_args=extra_compile_args,
Myle Ott's avatar
Myle Ott committed
56
    ),
57
    NumpyExtension(
Myle Ott's avatar
Myle Ott committed
58
59
60
61
62
63
        'fairseq.data.token_block_utils_fast',
        sources=['fairseq/data/token_block_utils_fast.pyx'],
        language='c++',
        extra_compile_args=extra_compile_args,
    ),
]
64
65


Sergey Edunov's avatar
Sergey Edunov committed
66
67
setup(
    name='fairseq',
Myle Ott's avatar
Myle Ott committed
68
    version='0.8.0',
Sergey Edunov's avatar
Sergey Edunov committed
69
    description='Facebook AI Research Sequence-to-Sequence Toolkit',
Myle Ott's avatar
Myle Ott committed
70
71
72
    url='https://github.com/pytorch/fairseq',
    classifiers=[
        'Intended Audience :: Science/Research',
73
        'License :: OSI Approved :: MIT License',
Bairen Yi's avatar
Bairen Yi committed
74
        'Programming Language :: Python :: 3.5',
Myle Ott's avatar
Myle Ott committed
75
76
77
        'Programming Language :: Python :: 3.6',
        'Topic :: Scientific/Engineering :: Artificial Intelligence',
    ],
Sergey Edunov's avatar
Sergey Edunov committed
78
    long_description=readme,
Myle Ott's avatar
Myle Ott committed
79
    long_description_content_type='text/markdown',
80
81
    setup_requires=[
        'cython',
Myle Ott's avatar
Myle Ott committed
82
        'numpy',
83
84
        'setuptools>=18.0',
    ],
Myle Ott's avatar
Myle Ott committed
85
86
    install_requires=[
        'cffi',
Naman Goyal's avatar
Naman Goyal committed
87
        'cython',
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']),
Myle Ott's avatar
Myle Ott committed
96
    ext_modules=extensions,
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
    zip_safe=False,
Sergey Edunov's avatar
Sergey Edunov committed
110
)