|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
""" |
|
Simple check list from AllenNLP repo: https://github.com/allenai/allennlp/blob/main/setup.py |
|
|
|
To create the package for pypi. |
|
|
|
1. Run `make pre-release` (or `make pre-patch` for a patch release) then run `make fix-copies` to fix the index of the |
|
documentation. |
|
|
|
If releasing on a special branch, copy the updated README.md on the main branch for your the commit you will make |
|
for the post-release and run `make fix-copies` on the main branch as well. |
|
|
|
2. Run Tests for Amazon Sagemaker. The documentation is located in `./tests/sagemaker/README.md`, otherwise @philschmid. |
|
|
|
3. Unpin specific versions from setup.py that use a git install. |
|
|
|
4. Checkout the release branch (v<RELEASE>-release, for example v4.19-release), and commit these changes with the |
|
message: "Release: <RELEASE>" and push. |
|
|
|
5. Wait for the tests on main to be completed and be green (otherwise revert and fix bugs) |
|
|
|
6. Add a tag in git to mark the release: "git tag v<RELEASE> -m 'Adds tag v<RELEASE> for pypi' " |
|
Push the tag to git: git push --tags origin v<RELEASE>-release |
|
|
|
7. Build both the sources and the wheel. Do not change anything in setup.py between |
|
creating the wheel and the source distribution (obviously). |
|
|
|
For the wheel, run: "python setup.py bdist_wheel" in the top level directory. |
|
(this will build a wheel for the python version you use to build it). |
|
|
|
For the sources, run: "python setup.py sdist" |
|
You should now have a /dist directory with both .whl and .tar.gz source versions. |
|
|
|
8. Check that everything looks correct by uploading the package to the pypi test server: |
|
|
|
twine upload dist/* -r pypitest |
|
(pypi suggest using twine as other methods upload files via plaintext.) |
|
You may have to specify the repository url, use the following command then: |
|
twine upload dist/* -r pypitest --repository-url=https://test.pypi.org/legacy/ |
|
|
|
Check that you can install it in a virtualenv by running: |
|
pip install -i https://testpypi.python.org/pypi diffusers |
|
|
|
Check you can run the following commands: |
|
python -c "from diffusers import pipeline; classifier = pipeline('text-classification'); print(classifier('What a nice release'))" |
|
python -c "from diffusers import *" |
|
|
|
9. Upload the final version to actual pypi: |
|
twine upload dist/* -r pypi |
|
|
|
10. Copy the release notes from RELEASE.md to the tag in github once everything is looking hunky-dory. |
|
|
|
11. Run `make post-release` (or, for a patch release, `make post-patch`). If you were on a branch for the release, |
|
you need to go back to main before executing this. |
|
""" |
|
|
|
import os |
|
import re |
|
from distutils.core import Command |
|
|
|
from setuptools import find_packages, setup |
|
|
|
|
|
|
|
|
|
|
|
_deps = [ |
|
"Pillow", |
|
"accelerate>=0.11.0", |
|
"compel==0.1.8", |
|
"black~=23.1", |
|
"datasets", |
|
"filelock", |
|
"flax>=0.4.1", |
|
"hf-doc-builder>=0.3.0", |
|
"huggingface-hub>=0.13.2", |
|
"requests-mock==1.10.0", |
|
"importlib_metadata", |
|
"invisible-watermark>=0.2.0", |
|
"isort>=5.5.4", |
|
"jax>=0.2.8,!=0.3.2", |
|
"jaxlib>=0.1.65", |
|
"Jinja2", |
|
"k-diffusion>=0.0.12", |
|
"torchsde", |
|
"note_seq", |
|
"librosa", |
|
"numpy", |
|
"omegaconf", |
|
"parameterized", |
|
"protobuf>=3.20.3,<4", |
|
"pytest", |
|
"pytest-timeout", |
|
"pytest-xdist", |
|
"ruff>=0.0.241", |
|
"safetensors>=0.3.1", |
|
"sentencepiece>=0.1.91,!=0.1.92", |
|
"scipy", |
|
"onnx", |
|
"regex!=2019.12.17", |
|
"requests", |
|
"tensorboard", |
|
"torch>=1.4", |
|
"torchvision", |
|
"transformers>=4.25.1", |
|
"urllib3<=2.0.0", |
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
deps = {b: a for a, b in (re.findall(r"^(([^!=<>~]+)(?:[!=<>~].*)?$)", x)[0] for x in _deps)} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def deps_list(*pkgs): |
|
return [deps[pkg] for pkg in pkgs] |
|
|
|
|
|
class DepsTableUpdateCommand(Command): |
|
""" |
|
A custom distutils command that updates the dependency table. |
|
usage: python setup.py deps_table_update |
|
""" |
|
|
|
description = "build runtime dependency table" |
|
user_options = [ |
|
|
|
("dep-table-update", None, "updates src/diffusers/dependency_versions_table.py"), |
|
] |
|
|
|
def initialize_options(self): |
|
pass |
|
|
|
def finalize_options(self): |
|
pass |
|
|
|
def run(self): |
|
entries = "\n".join([f' "{k}": "{v}",' for k, v in deps.items()]) |
|
content = [ |
|
"# THIS FILE HAS BEEN AUTOGENERATED. To update:", |
|
"# 1. modify the `_deps` dict in setup.py", |
|
"# 2. run `make deps_table_update``", |
|
"deps = {", |
|
entries, |
|
"}", |
|
"", |
|
] |
|
target = "src/diffusers/dependency_versions_table.py" |
|
print(f"updating {target}") |
|
with open(target, "w", encoding="utf-8", newline="\n") as f: |
|
f.write("\n".join(content)) |
|
|
|
|
|
extras = {} |
|
|
|
|
|
extras = {} |
|
extras["quality"] = deps_list("urllib3", "black", "isort", "ruff", "hf-doc-builder") |
|
extras["docs"] = deps_list("hf-doc-builder") |
|
extras["training"] = deps_list("accelerate", "datasets", "protobuf", "tensorboard", "Jinja2") |
|
extras["test"] = deps_list( |
|
"compel", |
|
"datasets", |
|
"Jinja2", |
|
"invisible-watermark", |
|
"k-diffusion", |
|
"librosa", |
|
"omegaconf", |
|
"parameterized", |
|
"pytest", |
|
"pytest-timeout", |
|
"pytest-xdist", |
|
"requests-mock", |
|
"safetensors", |
|
"sentencepiece", |
|
"scipy", |
|
"torchvision", |
|
"transformers", |
|
) |
|
extras["torch"] = deps_list("torch", "accelerate") |
|
|
|
if os.name == "nt": |
|
extras["flax"] = [] |
|
else: |
|
extras["flax"] = deps_list("jax", "jaxlib", "flax") |
|
|
|
extras["dev"] = ( |
|
extras["quality"] + extras["test"] + extras["training"] + extras["docs"] + extras["torch"] + extras["flax"] |
|
) |
|
|
|
install_requires = [ |
|
deps["importlib_metadata"], |
|
deps["filelock"], |
|
deps["huggingface-hub"], |
|
deps["numpy"], |
|
deps["regex"], |
|
deps["requests"], |
|
deps["safetensors"], |
|
deps["Pillow"], |
|
] |
|
|
|
setup( |
|
name="diffusers", |
|
version="0.20.0.dev0", |
|
description="Diffusers", |
|
long_description=open("README.md", "r", encoding="utf-8").read(), |
|
long_description_content_type="text/markdown", |
|
keywords="deep learning", |
|
license="Apache", |
|
author="The HuggingFace team", |
|
author_email="[email protected]", |
|
url="https://github.com/huggingface/diffusers", |
|
package_dir={"": "src"}, |
|
packages=find_packages("src"), |
|
include_package_data=True, |
|
python_requires=">=3.7.0", |
|
install_requires=list(install_requires), |
|
extras_require=extras, |
|
entry_points={"console_scripts": ["diffusers-cli=diffusers.commands.diffusers_cli:main"]}, |
|
classifiers=[ |
|
"Development Status :: 5 - Production/Stable", |
|
"Intended Audience :: Developers", |
|
"Intended Audience :: Education", |
|
"Intended Audience :: Science/Research", |
|
"License :: OSI Approved :: Apache Software License", |
|
"Operating System :: OS Independent", |
|
"Programming Language :: Python :: 3", |
|
"Programming Language :: Python :: 3.7", |
|
"Programming Language :: Python :: 3.8", |
|
"Programming Language :: Python :: 3.9", |
|
"Topic :: Scientific/Engineering :: Artificial Intelligence", |
|
], |
|
cmdclass={"deps_table_update": DepsTableUpdateCommand}, |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|