From 8f3a5b4b201f091713cb4e2b1b5883a4b12d10b2 Mon Sep 17 00:00:00 2001 From: Frost Ming Date: Thu, 18 Jul 2024 05:32:08 +0800 Subject: [PATCH] fix: release sdist to PyPI (#797) * fix: release sdist to PyPI * fix: add newline at file end * fix: ignore more files Signed-off-by: Frost Ming * fix: change the install root of cmake Signed-off-by: Frost Ming * fix: make it work for editable build as well Signed-off-by: Frost Ming * fix release script Signed-off-by: Frost Ming * fix: include files in sdist Signed-off-by: Frost Ming --------- Signed-off-by: Frost Ming Co-authored-by: Carbo Kuo --- .github/workflows/python.yml | 10 ++++---- .gitignore | 1 + MANIFEST.in | 9 +++++++ Makefile | 6 ++--- pyproject.toml | 3 +++ python/opencc/.gitignore | 1 + python/opencc/clib/__init__.py | 1 - release-pypi-linux.sh | 8 +++---- release-pypi-macos.sh | 6 ++--- release-pypi-windows.cmd | 6 ++--- setup.py | 43 +++++++++------------------------- 11 files changed, 43 insertions(+), 51 deletions(-) create mode 100644 MANIFEST.in create mode 100644 pyproject.toml diff --git a/setup.py b/setup.py index a7ce160d..a4bc500f 100644 --- a/setup.py +++ b/setup.py @@ -9,21 +9,12 @@ import wheel.bdist_wheel _this_dir = os.path.dirname(os.path.abspath(__file__)) -_clib_dir = os.path.join(_this_dir, 'python', 'opencc', 'clib') _build_dir = os.path.join(_this_dir, 'build', 'python') _cmake_file = os.path.join(_this_dir, 'CMakeLists.txt') _author_file = os.path.join(_this_dir, 'AUTHORS') _readme_file = os.path.join(_this_dir, 'README.md') -try: - sys.path.insert(0, os.path.join(_this_dir, 'python')) - - import opencc # noqa - _libopencc_built = True -except ImportError: - _libopencc_built = False - def get_version_info(): version_info = ['1', '0', '0'] @@ -70,20 +61,13 @@ def get_long_description(): return f.read().decode('utf-8') -def build_libopencc(): - if _libopencc_built: - return # Skip building binary file +def build_libopencc(output_path): print('building libopencc into %s' % _build_dir) is_windows = sys.platform == 'win32' # Make build directories - if is_windows: - subprocess.call('md {}'.format(_build_dir), shell=True) - subprocess.call('md {}'.format(_clib_dir), shell=True) - else: - subprocess.call('mkdir -p {}'.format(_build_dir), shell=True) - subprocess.call('mkdir -p {}'.format(_clib_dir), shell=True) + os.makedirs(_build_dir, exist_ok=True) # Configure cmake_args = [ @@ -93,14 +77,14 @@ def build_libopencc(): '-DENABLE_BENCHMARK:BOOL=OFF', '-DBUILD_PYTHON:BOOL=ON', '-DCMAKE_BUILD_TYPE=Release', - '-DCMAKE_INSTALL_PREFIX={}'.format(_clib_dir), - '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={}'.format(_clib_dir), + '-DCMAKE_INSTALL_PREFIX={}'.format(output_path), + '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={}'.format(output_path), '-DPYTHON_EXECUTABLE={}'.format(sys.executable), ] if is_windows: cmake_args += \ - ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE={}'.format(_clib_dir)] + ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE={}'.format(output_path)] if sys.maxsize > 2**32: cmake_args += ['-A', 'x64'] @@ -117,11 +101,6 @@ def build_libopencc(): errno = subprocess.call(cmd) assert errno == 0, 'Build failed' - # Empty __init__.py file has to be created - # to make opencc.clib a module - with open('{}/__init__.py'.format(_clib_dir), 'w'): - pass - class OpenCCExtension(setuptools.Extension, object): def __init__(self, name, sourcedir=''): @@ -131,8 +110,12 @@ def __init__(self, name, sourcedir=''): class BuildExtCommand(setuptools.command.build_ext.build_ext, object): def build_extension(self, ext): + if self.inplace: + output_path = os.path.join(_this_dir, 'python', 'opencc', 'clib') + else: + output_path = os.path.abspath(os.path.join(self.build_lib, 'opencc', 'clib')) if isinstance(ext, OpenCCExtension): - build_libopencc() + build_libopencc(output_path) else: super(BuildExtCommand, self).build_extension(ext) @@ -157,7 +140,7 @@ def _determine_platform_tag(): return 'macosx-11.0-{}'.format(machine) else: raise NotImplementedError - + if os.name == 'posix': _, _, _, _, machine = os.uname() return 'manylinux2014-{}'.format(machine) @@ -190,10 +173,6 @@ def initialize_options(self): packages=packages, package_dir={'opencc': 'python/opencc'}, - package_data={str('opencc'): [ - 'clib/opencc_clib*', - 'clib/share/opencc/*', - ]}, ext_modules=[OpenCCExtension('opencc.clib.opencc_clib', 'python')], cmdclass={ 'build_ext': BuildExtCommand,