Spaces:
Sleeping
Sleeping
| """ | |
| π μ§λμ AI Hugging Face Space μλ λ°°ν¬ μ€ν¬λ¦½νΈ | |
| μ¬μ©λ²: | |
| 1. pip install huggingface_hub | |
| 2. νκ²½λ³μμ ν ν° μ€μ (보μ!): | |
| export HF_TOKEN=your_token_here | |
| 3. python deploy.py | |
| β οΈ λ³΄μ κ²½κ³ : | |
| - ν ν°μ μ΄ νμΌμ μ§μ μμ±νμ§ λ§μΈμ! | |
| - νκ²½λ³μ λλ `huggingface-cli login` μ¬μ© κΆμ₯ | |
| - ν ν°μ΄ λ ΈμΆλμλ€λ©΄ μ¦μ https://huggingface.co/settings/tokens μμ revoke | |
| """ | |
| import os | |
| import sys | |
| from pathlib import Path | |
| try: | |
| from huggingface_hub import HfApi, create_repo | |
| except ImportError: | |
| print("β huggingface_hub μ€μΉ νμ: pip install huggingface_hub") | |
| sys.exit(1) | |
| # ------------------------------------------------------------- | |
| # μ€μ | |
| # ------------------------------------------------------------- | |
| SPACE_NAME = "geniegen-ai" # μνλ Space μ΄λ¦μΌλ‘ λ³κ²½ | |
| SPACE_SDK = "docker" # FastAPI + HTMLμ μν΄ docker SDK μ¬μ© | |
| # μ λ‘λν νμΌ λͺ©λ‘ (μ΄ μ€ν¬λ¦½νΈμ κ°μ λλ ν 리μ μμ΄μΌ ν¨) | |
| FILES_TO_UPLOAD = [ | |
| "app.py", | |
| "index.html", | |
| "requirements.txt", | |
| "README.md", | |
| "Dockerfile", | |
| ] | |
| def get_token(): | |
| """νκ²½λ³μ λλ CLI λ‘κ·ΈμΈμμ ν ν° κ°μ Έμ€κΈ°""" | |
| token = os.environ.get("HF_TOKEN") or os.environ.get("HUGGING_FACE_HUB_TOKEN") | |
| if not token: | |
| print("β οΈ HF_TOKEN νκ²½λ³μκ° μ€μ λμ§ μμμ΅λλ€.") | |
| print(" λ€μ μ€ νλλ₯Ό μννμΈμ:") | |
| print(" 1) export HF_TOKEN=hf_xxx (리λ μ€/λ§₯)") | |
| print(" 2) set HF_TOKEN=hf_xxx (μλμ° CMD)") | |
| print(" 3) huggingface-cli login (λνν λ‘κ·ΈμΈ)") | |
| sys.exit(1) | |
| return token | |
| def get_username(api: HfApi): | |
| """λ‘κ·ΈμΈλ μ¬μ©μλͺ μ‘°ν""" | |
| info = api.whoami() | |
| return info["name"] | |
| def deploy(): | |
| print("=" * 60) | |
| print("π μ§λμ AI Hugging Face Space λ°°ν¬ μμ") | |
| print("=" * 60) | |
| # 1. ν ν° & API μ΄κΈ°ν | |
| token = get_token() | |
| api = HfApi(token=token) | |
| try: | |
| username = get_username(api) | |
| print(f"β λ‘κ·ΈμΈ νμΈ: {username}") | |
| except Exception as e: | |
| print(f"β λ‘κ·ΈμΈ μ€ν¨: {e}") | |
| print(" ν ν°μ΄ μ ν¨νμ§ νμΈνμΈμ.") | |
| sys.exit(1) | |
| repo_id = f"{username}/{SPACE_NAME}" | |
| print(f"π¦ λμ Space: {repo_id}") | |
| # 2. Space μμ± (μ΄λ―Έ μμΌλ©΄ μ€ν΅) | |
| try: | |
| create_repo( | |
| repo_id=repo_id, | |
| repo_type="space", | |
| space_sdk=SPACE_SDK, | |
| token=token, | |
| exist_ok=True, | |
| private=False, | |
| ) | |
| print(f"β Space μ€λΉ μλ£ (SDK: {SPACE_SDK})") | |
| except Exception as e: | |
| print(f"β Space μμ± μ€ν¨: {e}") | |
| sys.exit(1) | |
| # 3. νμΌ μ‘΄μ¬ νμΈ | |
| base_dir = Path(__file__).parent | |
| missing = [f for f in FILES_TO_UPLOAD if not (base_dir / f).exists()] | |
| if missing: | |
| print(f"β λλ½λ νμΌ: {missing}") | |
| sys.exit(1) | |
| # 4. νμΌ μ λ‘λ | |
| print(f"\nπ€ νμΌ {len(FILES_TO_UPLOAD)}κ° μ λ‘λ μ€...") | |
| for filename in FILES_TO_UPLOAD: | |
| filepath = base_dir / filename | |
| try: | |
| api.upload_file( | |
| path_or_fileobj=str(filepath), | |
| path_in_repo=filename, | |
| repo_id=repo_id, | |
| repo_type="space", | |
| token=token, | |
| commit_message=f"Add {filename}", | |
| ) | |
| size_kb = filepath.stat().st_size / 1024 | |
| print(f" β {filename:<20} ({size_kb:.1f} KB)") | |
| except Exception as e: | |
| print(f" β {filename} μ λ‘λ μ€ν¨: {e}") | |
| # 5. μλ£ μλ΄ | |
| space_url = f"https://huggingface.co/spaces/{repo_id}" | |
| print("\n" + "=" * 60) | |
| print("π λ°°ν¬ μλ£!") | |
| print("=" * 60) | |
| print(f"π Space URL: {space_url}") | |
| print(f"π λΉλ μν: {space_url} νμ΄μ§μμ λ‘κ·Έ νμΈ κ°λ₯") | |
| print(f"β± Docker λΉλλ 2~5λΆ μμλ©λλ€") | |
| print("=" * 60) | |
| if __name__ == "__main__": | |
| deploy() | |