File size: 2,450 Bytes
0f84a70 35a2d28 0bda4a9 0f84a70 0bda4a9 a5bc6a8 35a2d28 97e5d8d 35a2d28 9eecded 0f84a70 9eecded 0f84a70 35a2d28 0f84a70 35a2d28 0f84a70 35a2d28 0f84a70 9eecded 35a2d28 9eecded 35a2d28 9eecded 35a2d28 0f84a70 35a2d28 0f84a70 35a2d28 49ae6ae 35a2d28 49ae6ae 97e5d8d 35a2d28 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
import os
from huggingface_hub import HfApi
from tempfile import TemporaryDirectory
import importlib.util
import sys
import shutil
import subprocess
def load_private_code():
token = os.environ.get("TOKEN", "")
if token:
try:
subprocess.run(
["pip", "install", f"git+https://{token}@github.com/neoAI-inc/[email protected]"],
check=True
)
except subprocess.CalledProcessError as e:
print("Error installing private module:", e)
api = HfApi(token=os.environ["PRIVATE_REPOSITORY_HF_TOKEN"])
tmp_dir = TemporaryDirectory() # with文を使用しない
try:
# プライベートスペースからファイルをダウンロード
api.snapshot_download(
repo_id="neoai-inc-private/pj-andromeda",
repo_type="space",
local_dir=tmp_dir.name
)
# tmp_dirをPythonパスに追加
sys.path.append(tmp_dir.name)
# 現在のディレクトリを一時的に変更
original_dir = os.getcwd()
os.chdir(tmp_dir.name)
# app.pyをインポート
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
# オリジナルのディレクトリに戻す
os.chdir(original_dir)
return private_module, tmp_dir # tmp_dirも返す
except Exception as e:
raise e
# プライベートコードを読み込んでGradioアプリを取得
private_app, tmp_dir = load_private_code() # tmp_dirを保持
app = private_app.app # Gradioアプリのインスタンス
# Cleanup function for when the app stops
def cleanup():
tmp_dir.cleanup()
# private側の認証情報を使用してアプリを起動
app.launch(
auth=(private_app.USERNAME, private_app.PASSWORD),
ssr_mode=False,
root_path=tmp_dir.name # 一時ディレクトリのパスを設定
) |