diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yml similarity index 70% rename from .github/workflows/ci.yaml rename to .github/workflows/ci.yml index ac4b963..836092c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yml @@ -17,17 +17,23 @@ jobs: matrix: include: - os: ubuntu-latest - python-version: 3.8 + python-version: '3.8' - os: ubuntu-latest - python-version: 3.9 + python-version: '3.9' - os: ubuntu-latest python-version: '3.10' - os: ubuntu-latest python-version: '3.11' + - os: ubuntu-latest + python-version: '3.12' + - os: macos-latest + python-version: '3.11' - os: macos-latest - python-version: 3.9 + python-version: '3.12' + - os: windows-latest + python-version: '3.11' - os: windows-latest - python-version: 3.9 + python-version: '3.12' steps: - uses: actions/checkout@v4 @@ -39,12 +45,11 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install -e ".[dev]" + python -m pip install --upgrade pip taskipy + task install - name: Lint with pysen run: | - pysen run lint + task lint - name: Test with pytest run: | - pip install pytest - pytest + task test diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 549f011..857bc15 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,4 +1,5 @@ # ref: https://github.com/tsukumijima/pyworld-prebuilt/blob/master/.github/workflows/build-wheels.yml + name: Deploy to PyPI on: diff --git a/.gitignore b/.gitignore index 4d3b0cb..89f8ed7 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ pyopenjtalk/open_jtalk_dic_utf_8-1.10/ pyopenjtalk/open_jtalk_dic_utf_8-1.11/ docs/generated sample.* +.venv/ # Created by https://www.gitignore.io diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 71c1120..0000000 --- a/.travis.yml +++ /dev/null @@ -1,40 +0,0 @@ -language: python - -python: - - "3.8" - -notifications: - email: false - -os: - - linux - -before_install: - - sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules - - git submodule update --init --recursive - # pandoc - - sudo apt-get -y install pandoc - # anaconda - - wget http://repo.continuum.io/miniconda/Miniconda3-3.8.3-Linux-x86_64.sh -O miniconda.sh - - bash miniconda.sh -b -p $HOME/miniconda - - export PATH="$HOME/miniconda/bin:$PATH" - - hash -r - - conda config --set always_yes yes --set changeps1 no - - conda update -q conda - # Useful for debugging any issues with conda - - conda config --add channels pypi - - conda info -a - - conda create -q -n test-environment "python=$TRAVIS_PYTHON_VERSION" pip - - source activate test-environment - - pip install pytest travis-sphinx - - cd $TRAVIS_BUILD_DIR - -install: - - pip install -e ".[test,docs]" - -script: - - pytest -v -s - - travis-sphinx build --source=docs - -after_success: - - travis-sphinx deploy diff --git a/README.md b/README.md index 6df5ee5..4f6e9af 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,69 @@ -# pyopenjtalk +# pyopenjtalk-plus + +[![PyPI](https://img.shields.io/pypi/v/pyopenjtalk-plus.svg)](https://pypi.python.org/pypi/pyopenjtalk-plus) +[![Python package](https://github.com/tsukumijima/pyopenjtalk-plus/actions/workflows/ci.yml/badge.svg)](https://github.com/tsukumijima/pyopenjtalk-plus/actions/workflows/ci.yml) +[![License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat)](LICENSE.md) + +pyopenjtalk-plus は、各フォークでの改善を一つのコードベースにまとめ、さらなる改善を加えることを目的とした、[pyopenjtalk](https://github.com/r9y9/pyopenjtalk) の派生ライブラリです。 + +## Changes in this fork + +- パッケージ名を `pyopenjtalk-plus` に変更 + - ライブラリ名は本家同様 `pyopenjtalk` としており、[pyopenjtalk](https://github.com/r9y9/pyopenjtalk) 本家のドロップイン代替として利用できる +- 明示的に Python 3.11 / 3.12 をサポート対象に追加 + - CI 対象の Python バージョンも 3.11 / 3.12 メインに変更した +- Windows・Mac (x64 / arm64)・Linux すべての事前ビルド済み wheels を PyPI に公開 + - pyopenjtalk は hts_engine_API・OpenJTalk・Cython に依存しており、ビルド環境の構築難易度が比較的高い + - 特に Windows においては MSVC のインストールが必要となる + - 事前ビルド済みの wheels を PyPI に公開することで、簡単にインストールできるようにした +- submodule としてリンクする hts_engine_API を [syoyo/hts_engine_API](https://github.com/syoyo/hts_engine_API) に変更 + - このフォークでは https://github.com/r9y9/hts_engine_API/issues/9 に挙げられている問題が修正されている +- 依存関係の numpy を 1.x 系に固定 + - numpy 2.x では互換性のない変更が多数行われており、もとよりレガシーな設計である現行の pyopenjtalk(-plus) では動作しないと考えられるため +- ライブラリの環境構築・ビルド・コード整形・テストを `taskipy` によるタスクランナーで管理 +- 利用予定のない Travis CI 向けファイルを削除 +- [litagin02/pyopenjtalk](https://github.com/litagin02/pyopenjtalk) の内容を取り込み、`pyopenjtalk.unset_user_dict()` 関数を追加 + - VOICEVOX で利用されている [VOICEVOX/pyopenjtalk](https://github.com/VOICEVOX/pyopenjtalk) には、VOICEVOX ENGINE で利用するためのユーザー辞書機能が独自に追加されている + - その後 pyopenjtalk v0.3.5 で同等のユーザー辞書機能が実装された + - VOICEVOX/pyopenjtalk の `set_user_dict()` 関数が `update_global_jtalk_with_user_dict()` 関数になるなど、同等の機能ながら関数名は変更されている + - …が、どういう訳か VOICEVOX/pyopenjtalk には存在した「設定したユーザー辞書をリセットする」関数が実装されていない + - そこで litagin02/pyopenjtalk では VOICEVOX/pyopenjtalk から `pyopenjtalk.unset_user_dict()` 関数が移植されており、pyopenjtalk-plus でもこの実装を継承した + +## Installation (TODO) + +```bash +pip install pyopenjtalk-plus +``` + +## Development + +開発環境は macOS / Linux 、Python は 3.11 が前提です。 + +```bash +# submodule ごとリポジトリを clone +git clone --recursive https://github.com/tsukumijima/pyopenjtalk-plus.git + +# ライブラリ自身とその依存関係を .venv/ 以下の仮想環境にインストールし、開発環境を構築 +pip install taskipy +task install + +# ライブラリの wheel と sdist をビルドし、dist/ に出力 +task build + +# コード整形 +task lint +task format + +# テストの実行 +task test +``` + +下記ならびに [docs/](docs/) 以下のドキュメントは、[pyopenjtalk](https://github.com/r9y9/pyopenjtalk) 本家のドキュメントを改変せず引き継いでいます。 +これらのドキュメントの内容が pyopenjtalk-plus にも通用するかは保証されません。 + +------- + +## pyopenjtalk [![PyPI](https://img.shields.io/pypi/v/pyopenjtalk.svg)](https://pypi.python.org/pypi/pyopenjtalk) [![Python package](https://github.com/r9y9/pyopenjtalk/actions/workflows/ci.yaml/badge.svg)](https://github.com/r9y9/pyopenjtalk/actions/workflows/ci.yaml) diff --git a/pyproject.toml b/pyproject.toml index ce01636..9bab302 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,15 @@ requires = [ ] build-backend = "setuptools.build_meta" +# Below are the development commands for Unix: +[tool.taskipy.tasks] +# .venv/bin/pip uninstall -y setuptools <- magic! +install = "if [ ! -d '.venv' ]; then python -m venv .venv; fi && .venv/bin/pip uninstall -y setuptools && .venv/bin/pip install -e '.[dev,test]'" +build = "pipx run build" +lint = ".venv/bin/pysen run lint" +format = ".venv/bin/pysen run format" +test = ".venv/bin/pytest" + [tool.pysen] version = "0.10.2" diff --git a/setup.py b/setup.py index e11d4f8..6224524 100644 --- a/setup.py +++ b/setup.py @@ -197,14 +197,14 @@ def run(self): long_description = fd.read() setup( - name="pyopenjtalk", + name="pyopenjtalk-plus", version=version, description="A python wrapper for OpenJTalk", long_description=long_description, long_description_content_type="text/markdown", author="Ryuichi Yamamoto", author_email="zryuichi@gmail.com", - url="https://github.com/r9y9/pyopenjtalk", + url="https://github.com/tsukumijima/pyopenjtalk-plus", license="MIT", packages=find_packages(), package_data={"": ["htsvoice/*"]}, @@ -212,7 +212,7 @@ def run(self): cmdclass={"build_ext": custom_build_ext, "build_py": build_py, "develop": develop}, install_requires=[ "importlib_resources; python_version<'3.9'", - "numpy >= 1.20.0", + "numpy >= 1.20.0, <2", "tqdm", ], tests_require=["nose", "coverage"], @@ -228,6 +228,7 @@ def run(self): "dev": [ "cython>=0.28.0", "pysen", + "taskipy", "types-setuptools", "mypy<=0.910", "black>=19.19b0,<=20.8", @@ -238,7 +239,7 @@ def run(self): "types-decorator", "importlib-metadata<5.0", ], - "test": ["pytest", "scipy"], + "test": ["pytest"], "marine": ["marine>=0.0.5"], }, classifiers=[ @@ -253,6 +254,8 @@ def run(self): "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", "License :: OSI Approved :: MIT License", "Topic :: Scientific/Engineering", "Topic :: Software Development",