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