depot/third_party/nixpkgs/pkgs/development/python-modules/gradio/default.nix
Default email fa5436e0a7 Project import generated by Copybara.
GitOrigin-RevId: e8057b67ebf307f01bdcc8fba94d94f75039d1f6
2024-06-05 17:53:02 +02:00

235 lines
4.9 KiB
Nix

{
lib,
stdenv,
buildPythonPackage,
fetchPypi,
pythonOlder,
pythonRelaxDepsHook,
writeShellScriptBin,
gradio,
# pyproject
hatchling,
hatch-requirements-txt,
hatch-fancy-pypi-readme,
# runtime
setuptools,
aiofiles,
altair,
diffusers,
fastapi,
ffmpy,
gradio-client,
httpx,
huggingface-hub,
importlib-resources,
jinja2,
markupsafe,
matplotlib,
numpy,
orjson,
packaging,
pandas,
pillow,
pydantic,
python-multipart,
pydub,
pyyaml,
semantic-version,
typing-extensions,
uvicorn,
typer,
tomlkit,
# oauth
authlib,
itsdangerous,
# check
pytestCheckHook,
boto3,
gradio-pdf,
ffmpeg,
ipython,
pytest-asyncio,
respx,
scikit-image,
torch,
tqdm,
transformers,
vega-datasets,
}:
buildPythonPackage rec {
pname = "gradio";
version = "4.32.1";
format = "pyproject";
disabled = pythonOlder "3.7";
# We use the Pypi release, since it provides prebuilt webui assets
src = fetchPypi {
inherit pname version;
hash = "sha256-t8C8BwE2xfVI2eKyST1jCZgrbytxiKcrsbVhfX07nA4=";
};
# fix packaging.ParserSyntaxError, which can't handle comments
postPatch = ''
sed -ie "s/ #.*$//g" requirements*.txt
# they bundle deps?
rm -rf venv/
'';
pythonRelaxDeps = [ "tomlkit" ];
pythonRemoveDeps = [
# our package is presented as a binary, not a python lib - and
# this isn't a real runtime dependency
"ruff"
];
nativeBuildInputs = [
pythonRelaxDepsHook
hatchling
hatch-requirements-txt
hatch-fancy-pypi-readme
];
dependencies = [
setuptools # needed for 'pkg_resources'
aiofiles
altair
diffusers
fastapi
ffmpy
gradio-client
httpx
huggingface-hub
importlib-resources
jinja2
markupsafe
matplotlib
numpy
orjson
packaging
pandas
pillow
pydantic
python-multipart
pydub
pyyaml
semantic-version
typing-extensions
uvicorn
typer
tomlkit
] ++ typer.passthru.optional-dependencies.all;
passthru.optional-dependencies.oauth = [
authlib
itsdangerous
];
nativeCheckInputs = [
pytestCheckHook
boto3
gradio-pdf
ffmpeg
ipython
pytest-asyncio
respx
scikit-image
# shap is needed as well, but breaks too often
torch
tqdm
transformers
vega-datasets
# mock calls to `shutil.which(...)`
(writeShellScriptBin "npm" "false")
] ++ passthru.optional-dependencies.oauth ++ pydantic.passthru.optional-dependencies.email;
# Add a pytest hook skipping tests that access network, marking them as "Expected fail" (xfail).
# We additionally xfail FileNotFoundError, since the gradio devs often fail to upload test assets to pypi.
preCheck =
''
export HOME=$TMPDIR
cat ${./conftest-skip-network-errors.py} >> test/conftest.py
''
+ lib.optionalString stdenv.isDarwin ''
# OSError: [Errno 24] Too many open files
ulimit -n 4096
'';
disabledTests = [
# Actually broken
"test_mount_gradio_app"
# requires network, it caught our xfail exception
"test_error_analytics_successful"
# Flaky, tries to pin dependency behaviour. Sensitive to dep versions
# These error only affect downstream use of the check dependencies.
"test_no_color"
"test_in_interface_as_output"
"test_should_warn_url_not_having_version"
# Flaky, unknown reason
"test_in_interface"
# shap is too often broken in nixpkgs
"test_shapley_text"
# fails without network
"test_download_if_url_correct_parse"
# tests if pip and other tools are installed
"test_get_executable_path"
];
disabledTestPaths = [
# 100% touches network
"test/test_networking.py"
# makes pytest freeze 50% of the time
"test/test_interfaces.py"
];
pytestFlagsArray = [
"-x" # abort on first failure
"-m 'not flaky'"
#"-W" "ignore" # uncomment for debugging help
];
__darwinAllowLocalNetworking = true;
# check the binary works outside the build env
doInstallCheck = true;
postInstallCheck = ''
env --ignore-environment $out/bin/gradio environment >/dev/null
'';
pythonImportsCheck = [ "gradio" ];
# Cyclic dependencies are fun!
# This is gradio without gradio-client and gradio-pdf
passthru.sans-reverse-dependencies =
(gradio.override (old: {
gradio-client = null;
gradio-pdf = null;
})).overridePythonAttrs
(old: {
pname = old.pname + "-sans-reverse-dependencies";
pythonRemoveDeps = (old.pythonRemoveDeps or [ ]) ++ [ "gradio-client" ];
doInstallCheck = false;
doCheck = false;
pythonImportsCheck = null;
dontCheckRuntimeDeps = true;
});
meta = with lib; {
homepage = "https://www.gradio.app/";
description = "Python library for easily interacting with trained machine learning models";
license = licenses.asl20;
maintainers = with maintainers; [ pbsds ];
};
}