YutaHikida commited on
Commit
7660a39
·
verified ·
1 Parent(s): 8395dbd

create app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -0
app.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ import importlib.util
4
+ import subprocess
5
+ from tempfile import TemporaryDirectory
6
+
7
+ from huggingface_hub import HfApi
8
+
9
+
10
+ def load_private_code():
11
+ token = os.environ["PRIVATE_REPOSITORY_HF_TOKEN"]
12
+
13
+ # private library が必要な場合のみ(pj-lynx の app 起動には不要なので通常はスキップ)
14
+ private_library_url = os.environ.get("PRIVATE_LIBRARY_URL", "")
15
+ if private_library_url:
16
+ try:
17
+ subprocess.run(
18
+ ["pip", "install", f"git+https://{token}@{private_library_url}"],
19
+ check=True,
20
+ )
21
+ except subprocess.CalledProcessError as e:
22
+ print("Error installing private module:", e)
23
+
24
+ api = HfApi(token=token)
25
+
26
+ # TemporaryDirectory を with で閉じると消えるので、閉じずに保持する
27
+ tmp_dir = TemporaryDirectory()
28
+ api.snapshot_download(
29
+ repo_id="neoai-inc-private/pj-lynx",
30
+ repo_type="space",
31
+ local_dir=tmp_dir.name,
32
+ )
33
+ sys.path.insert(0, tmp_dir.name) # DL先を最優先で import 解決
34
+
35
+ spec = importlib.util.spec_from_file_location(
36
+ "private_app",
37
+ os.path.join(tmp_dir.name, "app.py"),
38
+ )
39
+ private_module = importlib.util.module_from_spec(spec)
40
+ sys.modules["private_app"] = private_module
41
+
42
+ try:
43
+ spec.loader.exec_module(private_module)
44
+ except ModuleNotFoundError as e:
45
+ print(f"Error loading module: {e}")
46
+ print(f"Current sys.path: {sys.path}")
47
+ print(f"Contents of tmp_dir: {os.listdir(tmp_dir.name)}")
48
+ raise
49
+
50
+ private_module._tmp_dir = tmp_dir # GC で消えないよう参照を残す
51
+ return private_module
52
+
53
+
54
+ private_app = load_private_code()
55
+
56
+ # pj-lynx 側の Gradio オブジェクトは `demo`(元雛形の `app` ではない)
57
+ demo = private_app.demo
58
+ demo.queue(default_concurrency_limit=10)
59
+ demo.launch(
60
+ auth=(os.environ["APP_USERNAME"], os.environ["APP_PASSWORD"]),
61
+ ssr_mode=False,
62
+ )