Move dev, tf, notebook dependencies to extras

This commit is contained in:
Agrin Hilmkil 2021-04-26 20:34:01 +02:00
parent 6353e87166
commit 167f86417e
9 changed files with 44 additions and 21 deletions

View File

@ -43,7 +43,7 @@ jobs:
run: python3 -m pip install --upgrade pip run: python3 -m pip install --upgrade pip
- name: Install TTS - name: Install TTS
run: | run: |
python3 -m pip install . python3 -m pip install .[all]
python3 setup.py egg_info python3 setup.py egg_info
- name: Lint check - name: Lint check
run: | run: |

View File

@ -1,5 +1,5 @@
.DEFAULT_GOAL := help .DEFAULT_GOAL := help
.PHONY: test deps style lint install help .PHONY: test system-deps dev-deps deps style lint install help
help: help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
@ -10,6 +10,10 @@ system-deps: ## install linux system deps
sudo apt-get install -y espeak-ng sudo apt-get install -y espeak-ng
sudo apt-get install -y libsndfile1-dev sudo apt-get install -y libsndfile1-dev
dev-deps: ## install development deps
pip install -r requirements.dev.txt
pip install -r requirements.tf.txt
deps: ## install 🐸 requirements. deps: ## install 🐸 requirements.
pip install -r requirements.txt pip install -r requirements.txt
@ -25,4 +29,4 @@ lint: ## run pylint linter.
pylint ${target_dirs} pylint ${target_dirs}
install: ## install 🐸 TTS for development. install: ## install 🐸 TTS for development.
pip install -e . pip install -e .[all]

View File

@ -110,11 +110,17 @@ If you are only interested in [synthesizing speech](https://github.com/coqui-ai/
pip install TTS pip install TTS
``` ```
By default this only installs the requirements for PyTorch. To install the tensorflow dependencies as well, use the `tf` extra.
```bash
pip install TTS[tf]
```
If you plan to code or train models, clone 🐸TTS and install it locally. If you plan to code or train models, clone 🐸TTS and install it locally.
```bash ```bash
git clone https://github.com/coqui-ai/TTS git clone https://github.com/coqui-ai/TTS
pip install -e . pip install -e .[all,dev,notebooks,tf] # Select the relevant extras
``` ```
We use ```espeak-ng``` to convert graphemes to phonemes. You might need to install separately. We use ```espeak-ng``` to convert graphemes to phonemes. You might need to install separately.
@ -127,6 +133,7 @@ If you are on Ubuntu (Debian), you can also run following commands for installat
```bash ```bash
$ make system-deps # intended to be used on Ubuntu (Debian). Let us know if you have a diffent OS. $ make system-deps # intended to be used on Ubuntu (Debian). Let us know if you have a diffent OS.
$ make dev-deps # Dependencies only required for development
$ make install $ make install
``` ```

View File

@ -25,12 +25,11 @@ import subprocess
import sys import sys
import zipfile import zipfile
import fsspec
import pandas import pandas
import soundfile as sf import soundfile as sf
import tensorflow as tf
from absl import logging from absl import logging
gfile = tf.compat.v1.gfile
SUBSETS = { SUBSETS = {
"vox1_dev_wav": [ "vox1_dev_wav": [
@ -73,8 +72,7 @@ def download_and_extract(directory, subset, urls):
subset: subset name of the corpus. subset: subset name of the corpus.
urls: the list of urls to download the data file. urls: the list of urls to download the data file.
""" """
if not gfile.Exists(directory): fsspec.get_mapper(directory).fs.makedirs(directory, exist_ok=True)
gfile.MakeDirs(directory)
try: try:
for url in urls: for url in urls:
@ -107,7 +105,7 @@ def download_and_extract(directory, subset, urls):
extract_path_ori = os.path.join(directory, zfile.infolist()[0].filename) extract_path_ori = os.path.join(directory, zfile.infolist()[0].filename)
subprocess.call("mv %s %s" % (extract_path_ori, extract_path), shell=True) subprocess.call("mv %s %s" % (extract_path_ori, extract_path), shell=True)
finally: finally:
# gfile.Remove(zip_filepath) # fsspec.get_mapper(directory).fs.rm_file(zip_filepath)
pass pass
@ -160,7 +158,8 @@ def convert_audio_and_make_label(input_dir, subset, output_dir, output_file):
files = [] files = []
# Convert all AAC file into WAV format. At the same time, generate the csv # Convert all AAC file into WAV format. At the same time, generate the csv
for root, _, filenames in gfile.Walk(source_dir): fs = fsspec.get_mapper(source_dir).fs
for root, _, filenames in fs.walk(source_dir):
for filename in filenames: for filename in filenames:
name, ext = os.path.splitext(filename) name, ext = os.path.splitext(filename)
if ext.lower() == ".wav": if ext.lower() == ".wav":
@ -172,7 +171,7 @@ def convert_audio_and_make_label(input_dir, subset, output_dir, output_file):
# Convert AAC to WAV. # Convert AAC to WAV.
aac_file = os.path.join(root, filename) aac_file = os.path.join(root, filename)
wav_file = aac_file + ".wav" wav_file = aac_file + ".wav"
if not gfile.Exists(wav_file): if not fs.exists(wav_file):
if not decode_aac_with_ffmpeg(aac_file, wav_file): if not decode_aac_with_ffmpeg(aac_file, wav_file):
raise RuntimeError("Audio decoding failed.") raise RuntimeError("Audio decoding failed.")
else: else:

5
requirements.dev.txt Normal file
View File

@ -0,0 +1,5 @@
nose
coverage
black
isort
pylint==2.7.4

View File

@ -0,0 +1,2 @@
bokeh==1.4.0
numba==0.48

1
requirements.tf.txt Normal file
View File

@ -0,0 +1 @@
tensorflow==2.3.1

View File

@ -1,8 +1,6 @@
torch>=1.7 torch>=1.7
tensorflow==2.3.1
numpy==1.18.5 numpy==1.18.5
scipy>=0.19.0 scipy>=0.19.0
numba==0.48
librosa==0.7.2 librosa==0.7.2
phonemizer>=2.2.0 phonemizer>=2.2.0
unidecode==0.4.20 unidecode==0.4.20
@ -10,20 +8,13 @@ pypinyin
jieba jieba
tensorboardX tensorboardX
matplotlib matplotlib
Pillow
flask flask
tqdm tqdm
inflect inflect
bokeh==1.4.0
pysbd pysbd
soundfile soundfile
gdown gdown
umap-learn==0.4.6 umap-learn==0.4.6
cython cython
pyyaml pyyaml
# quality and style fsspec>=0.8.0
nose
coverage
black
isort
pylint==2.7.4

View File

@ -48,6 +48,14 @@ def pip_install(package_name):
requirements = open(os.path.join(cwd, 'requirements.txt'), 'r').readlines() requirements = open(os.path.join(cwd, 'requirements.txt'), 'r').readlines()
with open(os.path.join(cwd, 'requirements.notebooks.txt'), 'r') as f:
requirements_notebooks = f.readlines()
with open(os.path.join(cwd, 'requirements.dev.txt'), 'r') as f:
requirements_dev = f.readlines()
with open(os.path.join(cwd, 'requirements.tf.txt'), 'r') as f:
requirements_tf = f.readlines()
requirements_all = requirements_dev + requirements_notebooks + requirements_tf
with open('README.md', "r", encoding="utf-8") as readme_file: with open('README.md', "r", encoding="utf-8") as readme_file:
README = readme_file.read() README = readme_file.read()
@ -82,6 +90,12 @@ setup(
# 'build_ext': build_ext # 'build_ext': build_ext
}, },
install_requires=requirements, install_requires=requirements,
extras_require={
"all": requirements_all,
"dev": requirements_dev,
"notebooks": requirements_notebooks,
"tf": requirements_tf,
},
python_requires='>=3.6.0, <3.9', python_requires='>=3.6.0, <3.9',
entry_points={ entry_points={
'console_scripts': [ 'console_scripts': [