Skip to content

Commit

Permalink
Initial commit as pyopenjtalk-plus
Browse files Browse the repository at this point in the history
  • Loading branch information
tsukumijima committed Jul 29, 2024
1 parent e0aefdd commit 17d352b
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 54 deletions.
23 changes: 14 additions & 9 deletions .github/workflows/ci.yaml → .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
1 change: 1 addition & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# ref: https://github.com/tsukumijima/pyworld-prebuilt/blob/master/.github/workflows/build-wheels.yml

name: Deploy to PyPI

on:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
40 changes: 0 additions & 40 deletions .travis.yml

This file was deleted.

67 changes: 66 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
9 changes: 9 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
11 changes: 7 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,22 +197,22 @@ 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="[email protected]",
url="https://github.com/r9y9/pyopenjtalk",
url="https://github.com/tsukumijima/pyopenjtalk-plus",
license="MIT",
packages=find_packages(),
package_data={"": ["htsvoice/*"]},
ext_modules=ext_modules,
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"],
Expand All @@ -228,6 +228,7 @@ def run(self):
"dev": [
"cython>=0.28.0",
"pysen",
"taskipy",
"types-setuptools",
"mypy<=0.910",
"black>=19.19b0,<=20.8",
Expand All @@ -238,7 +239,7 @@ def run(self):
"types-decorator",
"importlib-metadata<5.0",
],
"test": ["pytest", "scipy"],
"test": ["pytest"],
"marine": ["marine>=0.0.5"],
},
classifiers=[
Expand All @@ -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",
Expand Down

0 comments on commit 17d352b

Please sign in to comment.