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
| import os import sysconfig
from setuptools import setup, find_packages
from Cython.Build import cythonize
from setuptools.command.build_py import build_py as _build_py
def read(): with open("./requirements.txt", "r") as f: return f.readlines()
packages = set(find_packages()) | {'your modules.'}
EXCLUDE_FILES = [ 'package/file1.py'
]
def get_ext_paths(root_dir, exclude_files): """get filepaths for compilation""" paths = []
for root, dirs, files in os.walk(root_dir): for filename in files: if os.path.splitext(filename)[1] != '.py': continue
file_path = os.path.join(root, filename) if file_path in exclude_files: continue
paths.append(file_path) return paths
class build_py(_build_py):
def find_package_modules(self, package, package_dir): ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') modules = super().find_package_modules(package, package_dir) filtered_modules = [] for (pkg, mod, filepath) in modules: if os.path.exists(filepath.replace('.py', ext_suffix)): continue filtered_modules.append((pkg, mod, filepath,)) return filtered_modules
setup( name='package name', version='0.3.0',
ext_modules=cythonize( get_ext_paths('project root path', EXCLUDE_FILES), compiler_directives={'language_level': 3.6} ), cmdclass={ 'build_py': build_py }, packages=packages, include_package_data=True, install_requires=read(), )
|