1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
import os
from setuptools import setup, Extension
import sys
import platform
import codecs
from distutils.command.build_ext import build_ext
if platform.system() != "Windows":
readme_path = os.path.join(os.path.dirname(__file__), 'README.rst')
with codecs.open(readme_path, encoding='utf8') as f:
readme = f.read()
else:
# The format is messed up with extra line breaks when building wheels on windows.
# Skip readme in this case.
readme = "Persistent collections, see https://github.com/tobgu/pyrsistent/ for details."
extensions = []
if platform.python_implementation() == 'CPython' and os.getenv("PYRSISTENT_SKIP_EXTENSION") is None:
extensions = [Extension('pvectorc', sources=['pvectorcmodule.c'])]
needs_pytest = {'pytest', 'test', 'ptr'}.intersection(sys.argv)
pytest_runner = ['pytest-runner'] if needs_pytest else []
class custom_build_ext(build_ext):
"""Allow C extension building to fail."""
warning_message = """
********************************************************************************
WARNING: Could not build the %s.
Pyrsistent will still work but performance may be degraded.
%s
********************************************************************************
"""
def run(self):
try:
build_ext.run(self)
except Exception:
e = sys.exc_info()[1]
sys.stderr.write('%s\n' % str(e))
sys.stderr.write(self.warning_message % ("extension modules", "There was an issue with your platform configuration - see above."))
raise
def build_extension(self, ext):
name = ext.name
try:
build_ext.build_extension(self, ext)
except Exception:
e = sys.exc_info()[1]
sys.stderr.write('%s\n' % str(e))
sys.stderr.write(self.warning_message % ("%s extension module" % name, "The output above this warning shows how the compilation failed."))
raise
setup(
name='pyrsistent',
description='Persistent/Functional/Immutable data structures',
long_description=readme,
long_description_content_type='text/x-rst',
author='Tobias Gustafsson',
author_email='tobias.l.gustafsson@gmail.com',
url='https://github.com/tobgu/pyrsistent/',
project_urls={
'Changelog': 'https://pyrsistent.readthedocs.io/en/latest/changes.html',
},
license='MIT',
license_files=['LICENSE.mit'],
py_modules=['_pyrsistent_version'],
classifiers=[
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12',
'Programming Language :: Python :: Implementation :: PyPy',
],
test_suite='tests',
tests_require=['pytest<7', 'hypothesis<7'],
scripts=[],
setup_requires=pytest_runner,
ext_modules=extensions,
cmdclass={'build_ext': custom_build_ext},
packages=['pyrsistent'],
package_data={'pyrsistent': ['py.typed', '__init__.pyi', 'typing.pyi']},
python_requires='>=3.8',
)
|