YutaHikida's picture
create app.py
7660a39 verified
Raw History Blame
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,
)