極速 Python 套件與專案管理器,以 Rust 編寫。
fyn 是 uv 的獨立社群分支。它始於 uv 的基礎,但現在擁有自己的指令、設定、預設值和行為,同時減少了套件索引請求的元數據,增加了功能,並修復了長期存在的錯誤。請參閱 MANIFESTO.md 以了解完整故事。
使用 fyn help 查看指令行參考。
即時文件網站為 duriantaco.github.io/fyn。事實的來源仍保留在儲存庫的 docs/ 目錄中。
如需 CLI 特定協助,請使用 fyn help 或 fyn help <command>。
fyn 管理專案依賴與環境,支援鎖定檔案、工作區等,類似於 rye 或 poetry:
使用 fyn lock diff 預覽依賴或專案元數據的編輯將如何更改 fyn.lock,而無需寫入。diff 報告新增、移除和變更的套件,以及僅限元數據的鎖定檔案更新,這在審查或提交鎖定檔案變更之前非常有用。
在 pyproject.toml 中定義任務,並使用 fyn run 執行它們:
Task 環境值會套用到產生的命令。對於鏈式任務,父環境值會被子任務繼承,子任務的值優先。cmd 任務支援額外參數,但鏈式任務不支援。
如果 fyn run 無法產生命令,它會嘗試指向下一步,而不是以原始 OS 錯誤停止:fyn run --list-tasks 以處理可能的任務拼寫錯誤,fyn tool run <command> 以處理遺失的 Python 提供的可執行檔,或針對遺失的 ./script 風格命令提供路徑特定提示。
在新的 shell 中啟用專案的虛擬環境:
適用於 bash、zsh、fish、nushell、powershell 和 cmd。
如果您傳遞路徑,fyn shell 會直接啟用該環境。否則,它會使用設定的 VIRTUAL_ENV,然後是偵測到的專案環境,然後是本機的 .venv。使用 --no-project 跳過專案偵測,僅檢查目前目錄。
使用一個指令升級所有或特定的依賴項:
fyn upgrade 是執行 fyn lock --upgrade 然後 fyn sync 的便利形式。
顯示包含某個套件的專案依賴路徑:
使用 --universal 忽略目前平台和 Python 版本,或使用依賴群組標誌,例如 --group、--only-group 和 --no-dev,以解釋所選的專案視圖。
檢查目前專案與環境狀態:
使用 --check 在明顯的專案檢查未通過時失敗,或使用 --json 進行腳本編寫和編輯器整合。在受管理的專案中,--check 還會報告遺失或不符的專案環境以及不滿足 requires-python 的 .python-version 釘選,並列印 hint: 行以及建議的修復。
在安裝或重新安裝 PyTorch 之前,檢查目前的機器與環境:
使用 --json 進行腳本編寫。fyn torch doctor 會報告建議和目前的套件狀態,但不會修改 pyproject.toml。
fyn 管理單一檔案腳本的依賴與環境。
建立一個新的腳本並添加宣告其依賴的內嵌元數據:
然後,在隔離的虛擬環境中執行腳本:
fyn 執行並安裝 Python 套件提供的命令列工具,類似於 pipx。
在臨時環境中使用 fynx(fyn tool run 的別名)執行工具:
使用 fyn tool install 安裝工具:
fyn 安裝 Python 並允許快速切換版本。
在目前目錄中使用特定的 Python 版本:
當您需要 fyn python pin 相對於自訂 Python 下載清單而不是預設的捆綁元數據進行解析時,請使用 --python-downloads-json-url <source>。
fyn 為常見的 pip、pip-tools 和 virtualenv 工作流程提供了一個快速、與 pip 相容的介面。
對於許多常見的工作流程,您可以以最小的變更切換到 fyn pip 介面,並保持相同的整體工作流程形狀,同時獲得 10-100 倍的速度提升。
將 requirements 編譯成獨立於平台的 requirements 檔案:
防止快取無界增長:
每次命令執行後,當快取超過限制時,最舊的條目會自動被修剪。支援 K、M、G 和 T 後綴。
為不同的環境使用不同的鎖定檔案:
環境變數在索引 URL 中起作用 — 對於帶有憑證的私有索引很有用:
對於傳遞性依賴項,也會尊重明確的索引,因此您不必將每個內部套件列為直接依賴項。
fyn 接近 uv,但不是零編輯重命名。大多數命令列工作流程和 UV_* 環境變數會延續,但專案元數據和鎖定檔案名稱不同。
我們熱衷於支持各級經驗的貢獻者,並希望看到您參與到專案中。請參閱貢獻指南以開始。
與 uv 相同:macOS、Linux 和 Windows,涵蓋 x86_64 和 aarch64。
在工作流程層級上,通常是的,但不是作為直接替代品。許多命令和 UV_* 環境變數會延續,但 fyn 現在有分支特定的命令、配置、預設值和行為。專案仍需要將 [tool.uv] 重命名為 [tool.fyn],並將 uv.lock 重命名為 fyn.lock,除非您覆蓋鎖定檔案名稱。
請參閱 MANIFESTO.md 以獲得更全面的比較,或參閱下表以了解一些較大的用戶可見差異:
fyn 的依賴解析器在底層使用 PubGrub。我們感謝 PubGrub 的維護者,特別是 Jacob Finkelman,感謝他們的支援。
fyn 最初是 Astral 的 uv 分支,至今仍與其有著實質性的淵源。
fyn 的一些工作流程 UX,特別是圍繞任務執行和未來的流程人體工學,也受到了 Hatch 的啟發。
fyn 的 Git 實現基於 Cargo。
fyn 的一些優化受到我們在 pnpm、Orogene 和 Bun 中看到的出色工作的啟發。我們也從 Nathaniel J. Smith 的 Posy 中學到了很多,並採用了其用於 Windows 支援的 trampoline。
除非您明確聲明,否則您有意提交給 fyn 的任何貢獻(根據 Apache-2.0 許可證定義)將以雙重許可證形式發布,且不附帶任何額外條款或條件。