setup.py 4.61 KB
Newer Older
liangjing's avatar
v1  
liangjing committed
1
2
3
"""Setup for pip package."""

import importlib.util
xingjinliang's avatar
xingjinliang committed
4
import subprocess
liangjing's avatar
v1  
liangjing committed
5
6
import os
import setuptools
xingjinliang's avatar
xingjinliang committed
7
from setuptools import Extension
liangjing's avatar
v1  
liangjing committed
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

spec = importlib.util.spec_from_file_location('package_info', 'megatron/core/package_info.py')
package_info = importlib.util.module_from_spec(spec)
spec.loader.exec_module(package_info)


__contact_emails__ = package_info.__contact_emails__
__contact_names__ = package_info.__contact_names__
__description__ = package_info.__description__
__download_url__ = package_info.__download_url__
__homepage__ = package_info.__homepage__
__keywords__ = package_info.__keywords__
__license__ = package_info.__license__
__package_name__ = package_info.__package_name__
__repository_url__ = package_info.__repository_url__
__version__ = package_info.__version__


xingjinliang's avatar
xingjinliang committed
26
27
28
with open("megatron/core/README.md", "r", encoding='utf-8') as fh:
    long_description = fh.read()
long_description_content_type = "text/markdown"
liangjing's avatar
v1  
liangjing committed
29
30


xingjinliang's avatar
xingjinliang committed
31
def req_file(filename, folder="requirements"):
wangxj's avatar
wangxj committed
32
    environment = os.getenv("PY_ENV", "pytorch_24.10")
liangjing's avatar
v1  
liangjing committed
33

wangxj's avatar
wangxj committed
34
    content = []
xingjinliang's avatar
xingjinliang committed
35
    with open(os.path.join(folder, environment, filename), encoding='utf-8') as f:
wangxj's avatar
wangxj committed
36
37
38
39
40
        content += f.readlines()

    with open(os.path.join("megatron", "core", "requirements.txt"), encoding='utf-8') as f:
        content += f.readlines()

liangjing's avatar
v1  
liangjing committed
41
42
43
44
    # you may also want to remove whitespace characters
    # Example: `\n` at the end of each line
    return [x.strip() for x in content]

xingjinliang's avatar
xingjinliang committed
45

liangjing's avatar
v1  
liangjing committed
46
47
install_requires = req_file("requirements.txt")

xingjinliang's avatar
xingjinliang committed
48
49
50
51
###############################################################################
#                             Extension Making                                #
# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #

liangjing's avatar
v1  
liangjing committed
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
###############################################################################

setuptools.setup(
    name=__package_name__,
    # Versions should comply with PEP440.  For a discussion on single-sourcing
    # the version across setup.py and the project code, see
    # https://packaging.python.org/en/latest/single_source_version.html
    version=__version__,
    description=__description__,
    long_description=long_description,
    long_description_content_type=long_description_content_type,
    # The project's main homepage.
    url=__repository_url__,
    download_url=__download_url__,
    # Author details
    author=__contact_names__,
    author_email=__contact_emails__,
    # maintainer Details
    maintainer=__contact_names__,
    maintainer_email=__contact_emails__,
    # The licence under which the project is released
    license=__license__,
    classifiers=[
        # How mature is this project? Common values are
        #  1 - Planning
        #  2 - Pre-Alpha
        #  3 - Alpha
        #  4 - Beta
        #  5 - Production/Stable
        #  6 - Mature
        #  7 - Inactive
        'Development Status :: 5 - Production/Stable',
        # Indicate who your project is intended for
        'Intended Audience :: Developers',
        'Intended Audience :: Science/Research',
        'Intended Audience :: Information Technology',
        # Indicate what your project relates to
        'Topic :: Scientific/Engineering',
        'Topic :: Scientific/Engineering :: Mathematics',
        'Topic :: Scientific/Engineering :: Image Recognition',
        'Topic :: Scientific/Engineering :: Artificial Intelligence',
        'Topic :: Software Development :: Libraries',
        'Topic :: Software Development :: Libraries :: Python Modules',
        'Topic :: Utilities',
        # Pick your license as you wish (should match "license" above)
        'License :: OSI Approved :: BSD License',
        # Supported python versions
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.8',
        'Programming Language :: Python :: 3.9',
        # Additional Setting
        'Environment :: Console',
        'Natural Language :: English',
        'Operating System :: OS Independent',
    ],
xingjinliang's avatar
xingjinliang committed
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
    packages=setuptools.find_namespace_packages(include=["megatron.core", "megatron.core.*"]),
    ext_modules=[
        Extension(
            "megatron.core.datasets.helpers_cpp",
            sources=["megatron/core/datasets/helpers.cpp"],
            language="c++",
            extra_compile_args=(
                subprocess.check_output(["python3", "-m", "pybind11", "--includes"])
                .decode("utf-8")
                .strip()
                .split()
            )
            + ['-O3', '-Wall', '-std=c++17'],
            optional=True,
        )
    ],
liangjing's avatar
v1  
liangjing committed
123
124
125
126
    # Add in any packaged data.
    include_package_data=True,
    # PyPI package information.
    keywords=__keywords__,
xingjinliang's avatar
xingjinliang committed
127
    install_requires=install_requires,
Jared Casper's avatar
Jared Casper committed
128
)