Hub Python Library documentation
Bir CLI uzantısı oluşturun
Bir CLI uzantısı oluşturun
hf CLI, topluluk tarafından sağlanan ve CLI ile sorunsuz bir şekilde entegre olan eklentileri ve özel komutları destekler. Eklentiler, herkese açık GitHub depoları olarak barındırılır ve tek bir komutla yüklenebilir. Yüklendikten sonra, yerleşik komutlar gibi üst düzey hf komutları olarak görünürler.
Bu sistem, GitHub CLI uzantılarından ilham almıştır. Bu kılavuzda, kendi uzantınızı nasıl oluşturacağınızı, yayımlayacağınızı ve keşfedilebilir hale getireceğinizi öğreneceksiniz.
Eklentilerin yüklenmesi ve yönetilmesine yönelik kullanıcıya yönelik belgeler için
hf extensionsCLI referansına bakın.
Genel Bakış
İki tür uzantı vardır:
- Shell betiği uzantıları: depoyun kök dizinine yerleştirilen tek bir çalıştırılabilir dosya (bash betiği, derlenmiş ikili vb.).
- Python eklentileri:
pyproject.tomliçeren standart bir Python paketi. Bağımlılıkların kullanıcının sistemiyle çakışmaması için izole bir sanal ortamda kurulur.
Her iki tür de aynı kuralları paylaşır:
- GitHub deposu mutlaka
hf-<name>(ör.hf-claude,hf-mem) adında olmalıdır. - Kurulum tamamlandıktan sonra, kullanıcılar eklentiyi
hf <name>(ör.hf claude) ile çalıştırır. - Eklenti,
hf --helpçıktısında “Extension commands” başlığı altında listelenir.
Bir kullanıcı hf extensions install [OWNER/]hf-<name> komutunu çalıştırdığında, sistem önce depo kökünde hf-<name> adında bir binary/script dosyası arar. Bulunursa, bir shell script eklentisi olarak yüklenir. Aksi takdirde, depo bir Python paketi olarak yüklenir.
Bir kabuk betiği uzantısı oluşturun
Bir kabuk betiği uzantısı en basit türdür. Kök dizinde hf-<name> adında çalıştırılabilir bir dosya içeren bir GitHub deposuna ihtiyacınız vardır.
Shell script uzantıları Windows'ta desteklenmez. Uzantınızın Windows'ta çalışması gerekiyorsa, bunun yerine bir Python uzantısı yapın.
Minimal örnek
GitHub'da hf-hello adında, tek dosyalı bir depo oluşturun:
hf-hello (depo kökünde):
#!/usr/bin/env bash
set -euo pipefail
echo "Hello from hf-hello extension!"
echo "Arguments: $@"Bitti! Kullanıcılar artık bunu kurup çalıştırabilir:
>>> hf extensions install <your-username>/hf-hello
>>> hf hello
Hello from hf-hello extension!
Arguments:Kabuk betiği uzantıları için ipuçları
- Her zaman bir shebang (
#!/usr/bin/env bash) ile başlayın ve güvenlik içinset -euo pipefailkullanın. - Betik, kullanıcının ilettiği tüm ek argümanları alır. Örneğin,
hf hello --name worldbetiğe--name worldargümanını iletir. - Kullanıcı giriş yaptıysa, Hugging Face jetonuna
HF_TOKENortam değişkeni üzerinden erişebilirsiniz. - Depo kökünde bir açıklama sağlamak için
manifest.jsonekleyin (bkz. Açıklama ekleme). - Harici bağımlılıklar (ör.
fzf,jqvb.) eklentinizle otomatik olarak kurulmaz. Betiğinizin başlangıcında gerekli araçları kontrol edin ve eksiklerse yardımcı bir hata mesajıyla zarifçe başarısız olun.
Gerçek dünya örneği için hanouticelina/hf-claude adresine bakın — HF Inference Providers ile Claude Code'u başlatan bir kabuk betiği uzantısı.
Bir Python uzantısı oluşturun
Python uzantıları, izole bir sanal ortamda kurulan tam Python paketleridir. Uzantınızın Python bağımlılıkları veya daha karmaşık bir mantığı varsa bu en iyi seçenektir.
Minimal örnek
GitHub'da bu yapıya sahip hf-hello adında bir depo oluşturun:
hf-hello/
├── pyproject.toml
└── src/
└── hf_hello/
├── __init__.py
└── cli.pypyproject.toml:
[build-system]
requires = ["setuptools>=64"]
build-backend = "setuptools.backends._legacy:_Backend"
[project]
name = "hf-hello"
version = "0.1.0"
description = "A hello-world hf CLI extension"
requires-python = ">=3.10"
[project.scripts]
hf-hello = "hf_hello.cli:main"src/hf_hello/cli.py:
import sys
def main():
print("Hello from hf-hello extension!")
print(f"Arguments: {sys.argv[1:]}")
if __name__ == "__main__":
main()Kritik kısım, [project.scripts] giriş noktasıdır: mutlaka hf-<name> adını taşımalıdır (burada hf-hello).
hf CLI, uzantınızı bu şekilde keşfeder ve çalıştırır.
Kullanıcılar onu aynı şekilde kurar ve çalıştırır:
>>> hf extensions install <your-username>/hf-hello
>>> hf hello
Hello from hf-hello extension!
Arguments: []Python eklentilerinin nasıl yüklendiği
Bir kullanıcı Python eklentisi yüklediğinde, aşağıdaki olaylar gerçekleşir:
- Sanal ortam
~/.local/share/hf/extensions/hf-<name>/venv/konumunda oluşturulur. - Paketiniz, GitHub depo arşivinden
pip installile yüklenir. - Sistem, venv içinde
hf-<name>konsol betiğinin oluşturulduğunu doğrular.
Bu, eklentinizin bağımlılıklarının tamamen izole olduğu anlamına gelir — kullanıcının diğer Python paketleriyle çelişmezler.
Gerçek dünya örneği için alvarobartt/hf-mem adresine bakın — HF modelleri için çıkarım bellek gereksinimlerini tahmin eden bir Python eklentisi.
Açıklama ekleyin
Açıklama, kullanıcıların uzantınızın ne yaptığını anlamasına yardımcı olur. hf extensions list ve hf --help çıktılarında görünür.
Sistem, bir açıklama için aşağıdaki sırayla arama yapar:
- Depo kökünde
manifest.json:
{
"description": "A short description of what your extension does"
}pyproject.tomldescriptionalanı (Python eklentileri için):
[project]
description = "A short description of what your extension does"- GitHub deposu açıklaması (depo sayfasındaki “About” alanı).
Python eklentileri için pyproject.toml içinde description ayarlamak en doğal yaklaşımdır.
Kabuk betiği eklentileri için manifest.json dosyası kullanın veya GitHub deposu açıklamasını ayarlayın.
Eklentinizi keşfedilebilir hale getirin
Kullanıcıların uzantınızı bulmasına yardımcı olmak için GitHub depomuza hf-extension konusunu ekleyin:
- GitHub'daki deponuza gidin.
- Sağ kenar çubuğundaki “About” (Hakkında) yazısının yanındaki dişli simgesine tıklayın.
- “Konular” altında
hf-extensionekleyin.
Bu, hf-extension konu sayfası üzerinden tüm mevcut eklentileri kolayca görüntülemenizi sağlayan bir topluluk konvansiyonudur.
Kullanıcılar, hf extensions search komutuyla uzantınızı doğrudan CLI üzerinden keşfedebilir; bu komut, hf-extension konusu etiketiyle işaretlenmiş tüm GitHub depolarını yıldız sayısına göre sıralayarak listeler:
>>> hf extensions search
NAME REPO STARS DESCRIPTION INSTALLED
------ ----------------------- ----- ----------------------------------- ---------
claude hanouticelina/hf-claude 2 Extension for `hf` CLI to launch... yes
agents hanouticelina/hf-agents HF extension to run local coding...INSTALLED sütunu, yerel olarak zaten kurulu olan eklentileri gösterir. Kullanıcılar, oradan hf extensions install <repo> komutuyla listelenen herhangi bir eklentiyi kurabilir.
Eklentinizi test edin
Geliştirme sırasında eklentinizi doğrudan GitHub depodan yükleyebilirsiniz:
# Install from your repo
>>> hf extensions install <your-username>/hf-<name>
# Run it
>>> hf <name>
# Reinstall after making changes (push to GitHub first)
>>> hf extensions install <your-username>/hf-<name> --force
# Update to the latest version (only if a newer commit is available)
>>> hf extensions update <name>
# List installed extensions
>>> hf extensions list
# Remove when done
>>> hf extensions remove <name>Güncellemeleri test ederken daha önce yüklenmiş bir sürümün üzerine yazmak için
--forcekullanın.
Yüklü eklentileri güncelle
Bir eklenti yüklendikten sonra, GitHub'da yayınlanan en son sürüme güncelleyebilirsiniz:
# Update a single extension (accepts `<name>`, `hf-<name>` or `OWNER/hf-<name>`)
>>> hf extensions update hf-claude
# Check every installed extension and update the outdated ones
>>> hf extensions updatehf extensions update, yalnızca zaten yüklü olan eklentileri günceller. Eklenti yüklü değilse bir hata oluşturulur. Güncel olan eklentiler atlanır.
Bir eklentinin sürümü, yüklendiği commit’tir ve hf extensions list komutundaki VERSION sütununda kısa bir SHA olarak gösterilir. GitHub üzerinde daha yeni bir commit bulunmadığında LATEST sütunu kontrol edilir ve eski bir eklenti çalıştırıldığında, hf extensions update <name> komutunu öneren bir ipucu yazdırılır. Kimlik doğrulaması yapılmamış istekler için GitHub’ın hız sınırları içinde kalmak amacıyla, hf her eklentinin en son commit’ini günde en fazla bir kez sorgular. Bu kontrolleri devre dışı bırakmak için HF_HUB_DISABLE_UPDATE_CHECK=1 değerini ayarlayın.
Bir Python uzantısı, yüklendiği Python sürümü kaldırıldığında (ör. bir Homebrew yükseltmesinden sonra) çalışmayı durdurursa, hf extensions update <name> sanal ortamını yeniden oluşturur.
Adlandırma kuralları
Eklenti adları şu kurallara uymalıdır:
- GitHub deposunun adı
hf-<name>olmalıdır. <name>bir harf veya rakamla başlamalıdır.<name>harfler, rakamlar,.,_ve-içerebilir.<name>, yerleşik birhfkomutuyla (ör.download,upload,auth) çakışamaz.
Kurulum sırasında kullanıcılar tam OWNER/hf-<name> adını veya yalnızca hf-<name> adını (varsayılan olarak huggingface kuruluşuna işaret eder) belirtebilir.
Mevcut uzantılar
Referans olarak kullanabileceğiniz bazı topluluk uzantıları şunlardır:
| Eklenti | Tür | Açıklama |
|---|---|---|
| hanouticelina/hf-claude | Kabuk betiği | HF Inference Providers ile Claude Code'u başlatın |
| alvarobartt/hf-mem | Python | HF modelleri için çıkarım bellek gereksinimlerini tahmin edin |