turn pyclipper into a package, export dynamic '__version__'

the _version.py file is autogenerated at build time from git tag using setuptools_scm; the pyclipper.__version__ variable exports that, as it's common in python packaging. This allows clients to import pyclipper and check its __version__ without needing to query the package metadata (which may be missing when pyclipper is embedded in native applications).
This commit is contained in:
Cosimo Lupo 2021-06-25 17:08:44 +01:00
parent fc2772aba0
commit 8aefba84b5
8 changed files with 19 additions and 9 deletions

5
.gitignore vendored
View file

@ -3,7 +3,8 @@ build
dist
pyclipper.egg-info
*.so
pyclipper/pyclipper.cpp
src/pyclipper/_pyclipper.cpp
src/pyclipper/_version.py
*.pyc
MANIFEST
.eggs/
.eggs/

View file

@ -3,7 +3,7 @@
# Here we only need to include those which are not tracked by git but we do
# want to be included
include pyclipper/pyclipper.cpp
include src/pyclipper/_pyclipper.cpp
# and exclude those that are tracked by git but don't want to be in the sdist
exclude dev

View file

@ -1,7 +1,7 @@
from __future__ import print_function
import sys
import os
from setuptools import setup
from setuptools import setup, find_packages
from setuptools.extension import Extension
from io import open
@ -23,7 +23,7 @@ if dev_mode:
from Cython.Distutils import build_ext
print('Development mode: Compiling Cython modules from .pyx sources.')
sources = ["pyclipper/pyclipper.pyx", "pyclipper/clipper.cpp"]
sources = ["src/pyclipper/_pyclipper.pyx", "src/clipper.cpp"]
from setuptools.command.sdist import sdist as _sdist
@ -40,7 +40,7 @@ if dev_mode:
else:
print('Distribution mode: Compiling Cython generated .cpp sources.')
sources = ["pyclipper/pyclipper.cpp", "pyclipper/clipper.cpp"]
sources = ["src/pyclipper/_pyclipper.cpp", "src/clipper.cpp"]
cmdclass = {}
@ -48,13 +48,14 @@ needs_pytest = {'pytest', 'test'}.intersection(sys.argv)
pytest_runner = ['pytest_runner'] if needs_pytest else []
ext = Extension("pyclipper",
ext = Extension("pyclipper._pyclipper",
sources=sources,
language="c++",
include_dirs=["src"],
# define extra macro definitions that are used by clipper
# Available definitions that can be used with pyclipper:
# use_lines, use_int32
# See pyclipper/clipper.hpp
# See src/clipper.hpp
# define_macros=[('use_lines', 1)]
)
@ -63,7 +64,7 @@ with open("README.rst", "r", encoding='utf-8') as readme:
setup(
name='pyclipper',
use_scm_version=True,
use_scm_version={"write_to": "src/pyclipper/_version.py"},
description='Cython wrapper for the C++ translation of the Angus Johnson\'s Clipper library (ver. 6.4.2)',
long_description=long_description,
author='Angus Johnson, Maxime Chalton, Lukas Treyer, Gregor Ratajc',
@ -89,6 +90,8 @@ setup(
"Topic :: Scientific/Engineering :: Mathematics",
"Topic :: Software Development :: Libraries :: Python Modules"
],
package_dir={"": "src"},
packages=find_packages(where="src"),
ext_modules=[ext],
setup_requires=[
'cython>=0.28',

View file

@ -0,0 +1,6 @@
from ._pyclipper import *
try:
from ._version import version as __version__
except ImportError:
__version__ = "0.0.0+unknown"