diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 19be86b403..1f6c4e8792 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -4,203 +4,69 @@ name: Upload Python Package on: - release: - types: [published] - -# on: -# push: -# branches: [ main ] -# pull_request: -# branches: [ main ] + push: + branches: [ main ] + pull_request: + branches: [ main ] jobs: - # deploy_with_windows: - # runs-on: ${{ matrix.os }} - # strategy: - # matrix: - # os: [windows-latest, macos-13, macos-latest] - # python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] - - # steps: - # - uses: actions/checkout@v3 - # - name: Set up Python ${{ matrix.python-version }} - # uses: actions/setup-python@v4 - # with: - # python-version: ${{ matrix.python-version }} - # - name: Install dependencies - # run: | - # make dev - # - name: Build wheel on ${{ matrix.os }} - # run: | - # make build - # - name: change macos version and arm64 - # if: ${{ matrix.os == 'macos-13' || matrix.os == 'macos-latest' }} - # run: | - # python -c " - # from pathlib import Path - # import subprocess - # replaced = subprocess.run(['sw_vers', '-productVersion'], capture_output=True, text=True).stdout.strip().split('.', 1)[0] + '_0_arm64' - # for whl_file in Path('./dist').glob('*.whl'): - # if 'universal2' in whl_file.stem: - # parts = whl_file.stem.split('_') - # be_replaced = '_'.join(parts[1:]) - # new_name = whl_file.name.replace(be_replaced, replaced) - # new_whl_file = whl_file.with_name(new_name) - # whl_file.rename(new_whl_file) - # print(f'Renamed: {whl_file} -> {new_whl_file}') - # " - # - name: change macos version and x86_64 - # if: ${{ matrix.os == 'macos-13' || matrix.os == 'macos-latest' }} - # run: | - # make build - # python -c " - # from pathlib import Path - # import subprocess - # replaced = subprocess.run(['sw_vers', '-productVersion'], capture_output=True, text=True).stdout.strip().split('.', 1)[0] + '_0_x86_64' - # for whl_file in Path('./dist').glob('*.whl'): - # if 'universal2' in whl_file.stem: - # parts = whl_file.stem.split('_') - # be_replaced = '_'.join(parts[1:]) - # new_name = whl_file.name.replace(be_replaced, replaced) - # new_whl_file = whl_file.with_name(new_name) - # whl_file.rename(new_whl_file) - # print(f'Renamed: {whl_file} -> {new_whl_file}') - # " - # - name: change macos version and arm64 - # if: ${{ (matrix.os != 'macos-13' || matrix['python-version'] != '3.11') && (matrix.os != 'macos-13' || matrix['python-version'] != '3.12') }} - # run: | - # make build - # python -c " - # from pathlib import Path - # for whl_file in Path('./dist').glob('*.whl'): - # if 'universal2' in whl_file.stem: - # new_name = whl_file.name.replace('universal2', 'arm64') - # new_whl_file = whl_file.with_name(new_name) - # whl_file.rename(new_whl_file) - # print(f'Renamed: {whl_file} -> {new_whl_file}') - # " - # - name: change macos version and x86_64 - # if: ${{ (matrix.os != 'macos-13' || matrix['python-version'] != '3.11') && (matrix.os != 'macos-13' || matrix['python-version'] != '3.12') }} - # run: | - # make build - # python -c " - # from pathlib import Path - # for whl_file in Path('./dist').glob('*.whl'): - # if 'universal2' in whl_file.stem: - # new_name = whl_file.name.replace('universal2', 'x86_64') - # new_whl_file = whl_file.with_name(new_name) - # whl_file.rename(new_whl_file) - # print(f'Renamed: {whl_file} -> {new_whl_file}') - # " - # - name: Build the project - # if: ${{ (matrix.os != 'macos-13' || matrix['python-version'] != '3.11') && (matrix.os != 'macos-13' || matrix['python-version'] != '3.12') }} - # run: | - # make build - # - name: Build and publish - # env: - # TWINE_USERNAME: __token__ - # TWINE_PASSWORD: ${{ secrets.TESTPYPI_TOKEN }} - # run: | - # twine check dist/*.whl - # twine upload --repository-url https://test.pypi.org/legacy/ dist/*.whl --verbose - - deploy_with_macos: + deploy_with_bdist_wheel: runs-on: ${{ matrix.os }} strategy: matrix: - os: [macos-13, macos-latest] + os: [windows-latest, macos-13, macos-latest] python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + exclude: + - os: macos-13 + python-version: "3.11" + - os: macos-13 + python-version: "3.12" + + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + make dev + - name: Build wheel on ${{ matrix.os }} + run: | + make build + - name: Build and publish + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.TESTPYPI_TOKEN }} + run: | + ls dist + twine check dist/*.whl + twine upload --repository-url https://test.pypi.org/legacy/ dist/*.whl --verbose + deploy_with_manylinux: + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - make dev - # - name: Build wheel on ${{ matrix.os }} - # run: | - # make build - - name: Build 1 - if: ${{ (matrix.os != 'macos-13' || matrix['python-version'] != '3.11') && (matrix.os != 'macos-13' || matrix['python-version'] != '3.12') }} - run: | - python setup.py bdist_wheel - # - name: Rename 1 - # run: | - # python -c " - # from pathlib import Path - # plat_info = '${{ matrix.buildplat[1] }}'.split('_', 1)[-1] - # sys_ver_info = '${{ matrix.buildplat[0] }}'.split('-')[-1] - # replaced = f'{sys_ver_info}_0_{plat_info}' - # print(replaced) - # for whl_file in Path('./dist').glob('*.whl'): - # parts = whl_file.stem.split('_') - # print(parts) - # be_replaced = '_'.join(parts[1:]) - # print(be_replaced) - # new_name = whl_file.name.replace(be_replaced, replaced) - # print(new_name) - # new_whl_file = whl_file.with_name(new_name) - # print(new_whl_file) - # whl_file.rename(new_whl_file) - # print(f'Renamed: {whl_file} -> {new_whl_file}') - # " - # - name: Build 2 - # if: ${{ (matrix.buildplat[0] != 'macos-13' || matrix['python-version'] != '3.11') && (matrix.buildplat[0] != 'macos-13' || matrix['python-version'] != '3.12') }} - # run: | - # make build - # - name: Rename 2 - # if: ${{ (matrix.buildplat[0] != 'macos-13' || matrix['python-version'] != '3.11') && (matrix.buildplat[0] != 'macos-13' || matrix['python-version'] != '3.12') }} - # run: | - # python -c " - # from pathlib import Path - # plat_info = '${{ matrix.buildplat[1] }}'.split('_', 1)[-1] - # for whl_file in Path('./dist').glob('*.whl'): - # parts = whl_file.stem.split('_', 3) - # be_replaced = parts[-1] - # new_name = whl_file.name.replace(be_replaced, plat_info) - # new_whl_file = whl_file.with_name(new_name) - # whl_file.rename(new_whl_file) - # print(f'Renamed: {whl_file} -> {new_whl_file}') - # " - # - name: Build 3 - # run: | - # make build - - name: Build and publish - if: ${{ (matrix.os != 'macos-13' || matrix['python-version'] != '3.11') && (matrix.os != 'macos-13' || matrix['python-version'] != '3.12') }} - env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.TESTPYPI_TOKEN }} - run: | - twine check dist/*.whl - twine upload --repository-url https://test.pypi.org/legacy/ dist/*.whl --verbose - + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Build wheel on Linux + uses: RalfG/python-wheels-manylinux-build@v0.7.1-manylinux2014_x86_64 + with: + # not supporting 3.6 due to annotations is not supported https://stackoverflow.com/a/52890129 + python-versions: 'cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311 cp312-cp312' + build-requirements: 'numpy cython' + - name: Install dependencies + run: | + python -m pip install twine + python -m pip list + - name: Build and publish + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.TESTPYPI_TOKEN }} + run: | + ls dist + twine check dist/*.whl + twine upload --repository-url https://test.pypi.org/legacy/ dist/pyqlib-*-manylinux*.whl --verbose - # deploy_with_manylinux: - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v3 - # - name: Set up Python ${{ matrix.python-version }} - # uses: actions/setup-python@v4 - # with: - # python-version: ${{ matrix.python-version }} - # - name: Build wheel on Linux - # uses: RalfG/python-wheels-manylinux-build@v0.7.1-manylinux2014_x86_64 - # with: - # # not supporting 3.6 due to annotations is not supported https://stackoverflow.com/a/52890129 - # python-versions: 'cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311 cp312-cp312' - # build-requirements: 'numpy cython' - # - name: Install dependencies - # run: | - # python -m pip install twine - # python -m pip list - # - name: Build and publish - # env: - # TWINE_USERNAME: __token__ - # TWINE_PASSWORD: ${{ secrets.TESTPYPI_TOKEN }} - # run: | - # ls dist - # twine check dist/*.whl - # twine upload --repository-url https://test.pypi.org/legacy/ dist/pyqlib-*-manylinux*.whl --verbose diff --git a/.github/workflows/test_qlib_from_pip.yml b/.github/workflows/test_qlib_from_pip.yml deleted file mode 100644 index 913f58cd85..0000000000 --- a/.github/workflows/test_qlib_from_pip.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: Test qlib from pip - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - timeout-minutes: 120 - - runs-on: ${{ matrix.os }} - strategy: - matrix: - # Since macos-latest changed from 12.7.4 to 14.4.1, - # the minimum python version that matches a 14.4.1 version of macos is 3.10, - # If you want to use python 3.7 in github action, then the latest macos system version is macos-13, - # after macos-13 python 3.7 is no longer supported. - # so we limit the macos version to macos-13. - os: [macos-13, macos-latest] - # not supporting 3.6 due to annotations is not supported https://stackoverflow.com/a/52890129 - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] - - steps: - - name: Test qlib from pip - uses: actions/checkout@v3 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Update pip to the latest version - run: | - python -m pip install --upgrade pip - - - name: Qlib installation test - run: | - python -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ pyqlib - - - name: Install Lightgbm for MacOS - if: ${{ matrix.os == 'macos-13' || matrix.os == 'macos-latest' }} - run: | - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Microsoft/qlib/main/.github/brew_install.sh)" - HOMEBREW_NO_AUTO_UPDATE=1 brew install lightgbm - # FIX MacOS error: Segmentation fault - # reference: https://github.com/microsoft/LightGBM/issues/4229 - wget https://raw.githubusercontent.com/Homebrew/homebrew-core/fb8323f2b170bd4ae97e1bac9bf3e2983af3fdb0/Formula/libomp.rb - brew unlink libomp - brew install libomp.rb - - - name: Downloads dependencies data - run: | - cd .. - python -m qlib.run.get_data qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn - cd qlib - - - name: Test workflow by config - run: | - qrun examples/benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml diff --git a/Makefile b/Makefile index ffdc4e3056..03dfc7310c 100644 --- a/Makefile +++ b/Makefile @@ -192,4 +192,4 @@ upload: ######################################################################################## docs-gen: - python -m sphinx.cmd.build -W docs $(PUBLIC_DIR) \ No newline at end of file + python -m sphinx.cmd.build -W docs $(PUBLIC_DIR) diff --git a/pyproject.toml b/pyproject.toml index 6a74b17402..bb8cb07f26 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,6 @@ classifiers = [ "Programming Language :: Python :: 3.12", ] name = "pyqlib" -license = {text = "MIT License"} dynamic = ["version"] description = "A Quantitative-research Platform" requires-python = ">=3.8.0" diff --git a/qlib/__init__.py b/qlib/__init__.py index 497d7a2986..cd62f11594 100644 --- a/qlib/__init__.py +++ b/qlib/__init__.py @@ -2,7 +2,7 @@ # Licensed under the MIT License. from pathlib import Path -__version__ = "0.9.5.81" +__version__ = "0.9.5.80" __version__bak = __version__ # This version is backup for QlibConfig.reset_qlib_version import os from typing import Union diff --git a/setup.py b/setup.py index fe610e6fe9..d9e338315c 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,4 @@ -from setuptools import find_packages, setup, Extension -import tomli +from setuptools import setup, Extension import numpy import os @@ -17,21 +16,6 @@ def get_version(rel_path: str) -> str: return line.split(delim)[1] raise RuntimeError("Unable to find version string.") -here = os.path.abspath(os.path.dirname(__file__)) - -with open("pyproject.toml", "rb") as f: - pyproject_data = tomli.load(f) - -with open(os.path.join(here, "README.md"), encoding="utf-8") as f: - long_description = f.read() - -project_config = pyproject_data.get("project", {}) -name = project_config.get("name", "default-package-name") -description = project_config.get("description", "") -dependencies = project_config.get("dependencies", []) -classifiers = project_config.get("classifiers", []) -python_requires = project_config.get("requires-python", ">=3.8.0") -optional_dependencies = pyproject_data.get("project", {}).get("optional-dependencies", {}) NUMPY_INCLUDE = numpy.get_include() @@ -40,23 +24,6 @@ def get_version(rel_path: str) -> str: setup( version=VERSION, - name=name, - description=description, - install_requires=dependencies, - long_description=long_description, - long_description_content_type="text/markdown", - include_package_data=True, - classifiers=classifiers, - extras_require=optional_dependencies, - python_requires=python_requires, - license="MIT Licence", - url="https://github.com/microsoft/qlib", - packages=find_packages(exclude=("tests",)), - entry_points={ - "console_scripts": [ - "qrun=qlib.workflow.cli:run", - ], - }, ext_modules=[ Extension( "qlib.data._libs.rolling", @@ -70,5 +37,5 @@ def get_version(rel_path: str) -> str: language="c++", include_dirs=[NUMPY_INCLUDE], ), - ], + ] )