Spaces:
Running
Running
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 # 一時ディレクトリのパスを設定 | |
) |