Spaces:
Sleeping
Sleeping
Download app.py from project-hb/term-generation-demo: direct link, hf CLI and curl.
- Browser
- Download file 1.97 kB
-
https://huggingface.co/spaces/project-hb/term-generation-demo/resolve/refs%2Fpr%2F1/app.py
- Command line
-
hf download hf://spaces/project-hb/term-generation-demo@refs/pr/1/app.py
-
curl -L -o app.py https://huggingface.co/spaces/project-hb/term-generation-demo/resolve/refs%2Fpr%2F1/app.py
1.97 kB
| import os | |
| import sys | |
| import importlib.util | |
| import subprocess | |
| from tempfile import TemporaryDirectory | |
| from huggingface_hub import HfApi | |
| def load_private_code(): | |
| token = os.environ["PRIVATE_REPOSITORY_HF_TOKEN"] | |
| # private library が必要な場合のみ(pj-lynx の app 起動には不要なので通常はスキップ) | |
| private_library_url = os.environ.get("PRIVATE_LIBRARY_URL", "") | |
| if private_library_url: | |
| try: | |
| subprocess.run( | |
| ["pip", "install", f"git+https://{token}@{private_library_url}"], | |
| check=True, | |
| ) | |
| except subprocess.CalledProcessError as e: | |
| print("Error installing private module:", e) | |
| api = HfApi(token=token) | |
| # TemporaryDirectory を with で閉じると消えるので、閉じずに保持する | |
| tmp_dir = TemporaryDirectory() | |
| api.snapshot_download( | |
| repo_id="neoai-inc-private/pj-lynx", | |
| repo_type="space", | |
| local_dir=tmp_dir.name, | |
| ) | |
| sys.path.insert(0, tmp_dir.name) # DL先を最優先で import 解決 | |
| spec = importlib.util.spec_from_file_location( | |
| "private_app", | |
| os.path.join(tmp_dir.name, "app.py"), | |
| ) | |
| private_module = importlib.util.module_from_spec(spec) | |
| sys.modules["private_app"] = private_module | |
| try: | |
| spec.loader.exec_module(private_module) | |
| except ModuleNotFoundError as e: | |
| print(f"Error loading module: {e}") | |
| print(f"Current sys.path: {sys.path}") | |
| print(f"Contents of tmp_dir: {os.listdir(tmp_dir.name)}") | |
| raise | |
| private_module._tmp_dir = tmp_dir # GC で消えないよう参照を残す | |
| return private_module | |
| private_app = load_private_code() | |
| # pj-lynx 側の Gradio オブジェクトは `demo`(元雛形の `app` ではない) | |
| demo = private_app.demo | |
| demo.queue(default_concurrency_limit=10) | |
| demo.launch( | |
| auth=(os.environ["APP_USERNAME"], os.environ["APP_PASSWORD"]), | |
| ssr_mode=False, | |
| ) | |