
開發(fā)工具CLI【免費(fèi)下載鏈接】ryea Hassle-Free Python Experience項(xiàng)目地址https://gitcode.com/gh_mirrors/ry/rye點(diǎn)擊查看免費(fèi)下載Rye 通過rye tools別名rye install/rye uninstall提供全局工具安裝能力讓black、ruff這類 Python CLI 工具以獨(dú)立虛擬環(huán)境的方式安裝到~/.rye/tools/并在~/.rye/shims生成可直接調(diào)用的 shim從而實(shí)現(xiàn)一次安裝、全局使用。本文以 docs/guide/tools.md 為主體結(jié)合 rye/src/installer.rs 與 rye/src/cli/tools.rs 等源碼實(shí)現(xiàn)完整講解工具的安裝、附加依賴注入、列表查詢與卸載并深入剖析其虛擬環(huán)境隔離、shim 符號(hào)鏈接、腳本發(fā)現(xiàn)與版本探測等底層原理。什么是 Rye 的全局工具與普通項(xiàng)目內(nèi)通過rye add添加的項(xiàng)目依賴不同全局工具是 Rye 在用戶全局范圍內(nèi)維護(hù)的一組獨(dú)立安裝的 Python 軟件包。每個(gè)工具都會(huì)被裝入屬于它自己的獨(dú)立虛擬環(huán)境virtualenv中不與你任何項(xiàng)目的.venv相互污染。典型用途包括全局安裝代碼格式化工具如black、ruff全局安裝各類命令行小工具如pycowsay、gradio讓同一個(gè)工具在所有項(xiàng)目、所有目錄下都能通過 shim 直接調(diào)用無需反復(fù)pip install。從目錄結(jié)構(gòu)看全局工具被安裝在 Rye 的應(yīng)用目錄默認(rèn)~/.rye下的tools/與shims/兩個(gè)子目錄中~/.rye/tools/包名/每個(gè)工具一個(gè)獨(dú)立的虛擬環(huán)境目錄包名經(jīng)過規(guī)范化處理~/.rye/shims/指向工具虛擬環(huán)境內(nèi)可執(zhí)行文件的 shim符號(hào)鏈接。Rye 的安裝器實(shí)現(xiàn)位于 rye/src/installer.rs其中install()、uninstall()、list_installed_tools()三個(gè)函數(shù)分別對應(yīng)install、uninstall、list三條子命令的底層邏輯CLI 入口在 rye/src/cli/install.rs、rye/src/cli/uninstall.rs 與 rye/src/cli/tools.rs。安裝全局工具基本安裝使用rye tools install命令別名為rye install即可將任意 Python 包作為全局工具安裝rye install ruff執(zhí)行完成后工具被安裝到~/.rye/tools/ruff這個(gè)獨(dú)立的虛擬環(huán)境中必要的 shim 被放置到~/.rye/shims隨后便可在任意目錄直接執(zhí)行ruff。版本說明/- 0.4.0install命令現(xiàn)在會(huì)考慮config.toml中配置的自定義依賴源sources。更多信息參見 Dependency Sources。安裝過程中的一個(gè)關(guān)鍵行為是默認(rèn)只為頂層依賴即你指定的那個(gè)包提供的腳本創(chuàng)建 shim。Rye 使用一段內(nèi)嵌的 Python 腳本源碼中名為FIND_SCRIPT_SCRIPT見 rye/src/installer.rs通過importlib.metadata遍歷該包及其依賴的安裝文件清單找出虛擬環(huán)境bin/目錄下的可執(zhí)行文件。只有當(dāng)某個(gè)腳本位于頂層包的安裝清單中時(shí)才會(huì)被鏈接到shims/目錄依賴包中的腳本默認(rèn)不會(huì)被安裝詳見下文從依賴安裝腳本一節(jié)。一個(gè)完整的安裝演示官方文檔以pycowsay為例給出了完整的安裝與使用過程來源rye tools install 命令參考$ rye tools install pycowsay Looking in indexes: https://pypi.org/simple/ Collecting pycowsay Downloading pycowsay-0.0.0.2-py3-none-any.whl.metadata (965 bytes) Downloading pycowsay-0.0.0.2-py3-none-any.whl (4.0 kB) Installing collected packages: pycowsay Successfully installed pycowsay-0.0.0.2 Installed scripts: - pycowsay $ pycowsay Great Stuff ----------- Great Stuff ----------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||可以看到安裝成功后 Rye 會(huì)打印 Installed scripts: 及該包提供的腳本列表隨后無需任何額外 PATH 配置直接執(zhí)行pycowsay即可。當(dāng)頂層包未暴露任何腳本時(shí)Rye 會(huì)給出警告installed package did not expose any scripts當(dāng)依賴中存在腳本但未被安裝時(shí)會(huì)提示Found additional non installed scripts in dependencies:并建議使用--include-dep相關(guān)邏輯見 rye/src/installer.rs 的install()。安裝參數(shù)與選項(xiàng)rye tools install與rye install是同一命令的兩個(gè)名字。其完整參數(shù)定義在 rye/src/cli/install.rs位置參數(shù)參數(shù)說明REQUIREMENT...要安裝的包使用 PEP 508 規(guī)范的 requirement 字符串常用選項(xiàng)選項(xiàng)說明--git GIT從指定的 git 倉庫安裝該包--url URL從指定的 URL 安裝該包--path PATH從本地路徑安裝該包--absolute強(qiáng)制使用非插值的絕對路徑--tag TAG安裝指定的 tag--rev REV更新到指定的 git rev--branch BRANCH更新到指定的 git 分支--features FEATURES為依賴添加指定的 featureextra--include-dep INCLUDE_DEP同時(shí)安裝來自指定依賴的腳本可重復(fù)--extra-requirement EXTRA_REQUIREMENT額外安裝主包未聲明的依賴可重復(fù)-p, --python PYTHON指定使用的 Python 版本-f, --force即使包已存在也強(qiáng)制重新安裝-v, --verbose開啟詳細(xì)診斷輸出-q, --quiet關(guān)閉所有輸出-h, --help打印幫助信息從源碼看rye/src/cli/install.rs 對 requirement 的解析有兩層邏輯handle_requirement()首先嘗試將參數(shù)作為本地路徑解析調(diào)用resolve_local_requirement()見 rye/src/installer.rs它通過 self venv 中的 pip 執(zhí)行download --no-deps探測路徑對應(yīng)的真實(shí)包名若路徑不存在則回退為 PEP 508 requirement 解析。當(dāng)參數(shù)形如 URL 但解析失敗時(shí)會(huì)給出友好提示It looks like a URL, maybe you wanted to use --url or --git。-p/--python參數(shù)使用PythonVersionRequest解析rye/src/sources/py.rs未指定時(shí)回退到 config.toml 中[default]段的toolchain配置若也未配置則默認(rèn)使用 Python 3。安裝過程中installer::install()會(huì)先通過fetch()確保目標(biāo) Python 版本可用再調(diào)用create_virtualenv()創(chuàng)建獨(dú)立虛擬環(huán)境隨后交由 uv 完成實(shí)際安裝UvBuilder::new().venv(...).install(...)詳見 rye/src/installer.rs。附加依賴Extra Requirements部分工具并未聲明全部依賴因?yàn)檫@些依賴是可選的optional。Rye 為此提供了兩種補(bǔ)充方式1. 通過 featuresextras聲明若工具聲明了可選特性可通過--features直接傳給安裝器rye install black --features colorama說明當(dāng)前命令參考中該參數(shù)寫作--features FEATURESAdds a dependency with a specific feature在 rye/src/cli/install.rs 中經(jīng)由ReqExtrasapply_to_requirement()合并進(jìn)最終 requirement。2. 通過--extra-requirement顯式補(bǔ)充若依賴完全沒有聲明則可用--extra-requirement顯式提供。這在工具使用pkg_resourcessetuptools的一部分卻忘記聲明該依賴時(shí)尤其必要rye install gradio --extra-requirement setuptools--extra-requirement與--include-dep都是可重復(fù)選項(xiàng)源碼中定義為VecString。在 rye/src/installer.rs 中這些額外 requirement 會(huì)被傳給 uv 的UvInstallOptionsextras字段與主包一起安裝進(jìn)同一個(gè)工具虛擬環(huán)境若安裝失敗安裝器會(huì)自動(dòng)清理已創(chuàng)建的虛擬環(huán)境與 shimuninstall_helper保證不會(huì)留下半成品狀態(tài)。從依賴安裝腳本--include-dep默認(rèn)情況下 Rye 只為頂層依賴的腳本創(chuàng)建 shim。若某個(gè)工具提供的命令行入口來自其子依賴?yán)缒承┌芽蓤?zhí)行文件放在依賴包中則需要用--include-dep顯式指定rye install some-tool --include-dep some-sub-package從 rye/src/installer.rs 的實(shí)現(xiàn)看安裝后 Rye 會(huì)列出工具虛擬環(huán)境內(nèi)所有包的安裝清單只有包名經(jīng)normalize_package_name規(guī)范化后匹配--include-dep列表中某項(xiàng)的依賴包其bin/目錄下的可執(zhí)行文件才會(huì)被創(chuàng)建 shim其他依賴包中的腳本只會(huì)被發(fā)現(xiàn)并打印出來提示Found additional non installed scripts in dependencies:并給出 To install scripts from these packages pass the appropriate --include-dep 的提示。列出已安裝的工具使用rye tools list查看當(dāng)前已安裝的全局工具rye tools list輸出示例black black blackd ruff ruff每一行為工具名源碼中用青色高亮見 rye/src/cli/tools.rs 的list_tools()其下縮進(jìn)顯示該工具提供的腳本。顯示腳本列表--include-scripts要查看每個(gè)工具提供了哪些腳本加-s, --include-scriptsrye tools list --include-scripts版本說明/- 0.26.0該短選項(xiàng)由-i改名為-s。顯示工具版本--include-version需要同時(shí)查看工具版本時(shí)使用-v, --include-version$ rye tools list --include-version pycowsay 0.0.0.2 (cpython3.12.1)版本說明/- 0.26.0該選項(xiàng)由-v, --version-show改名為-v, --include-version。從實(shí)現(xiàn)上看rye/src/cli/tools.rs rye/src/installer.rs 的list_installed_tools()Rye 遍歷~/.rye/tools/下的每個(gè)子目錄作為工具候選通過read_venv_marker()rye/src/pyproject.rs讀取虛擬環(huán)境的 venv marker從而在--include-version時(shí)顯示對應(yīng)的 Python 版本如cpython3.12.1執(zhí)行內(nèi)嵌的TOOL_VERSION_SCRIPT一段調(diào)用importlib.metadata.version的 Python 代碼獲取工具版本號(hào)通過is_same_file()比對~/.rye/shims中與工具虛擬環(huán)境bin/下相同文件名的條目判斷哪些腳本有對應(yīng)的 shim從而決定腳本是否計(jì)入列表若某個(gè)工具的環(huán)境損壞版本探測失敗list會(huì)以紅色標(biāo)注(seems broken)提示用戶而不是直接崩潰。卸載全局工具使用rye tools uninstall別名為rye uninstall卸載已安裝的全局工具rye uninstall black命令輸出示例官方文檔來源rye tools uninstall 命令參考$ rye tools uninstall pycowsay Uninstalled pycowsay位置參數(shù)NAME— 要卸載的包名。選項(xiàng)-v, --verbose詳細(xì)輸出、-q, --quiet關(guān)閉輸出、-h, --help。從源碼實(shí)現(xiàn)看rye/src/installer.rs 的uninstall()與uninstall_helper()卸載過程分三步檢查~/.rye/tools/包名包名同樣經(jīng)過規(guī)范化是否存在若不存在則提示包名 is not installed并直接返回遍歷工具虛擬環(huán)境bin/目錄凡是與~/.rye/shims中同名的 shim通過is_same_file()確認(rèn)指向同一文件逐一刪除對應(yīng) shim刪除整個(gè)工具虛擬環(huán)境目錄~/.rye/tools/包名。值得注意的細(xì)節(jié)在 Windows 平臺(tái)上rye/src/installer.rs 的install_scripts()在符號(hào)鏈接創(chuàng)建失敗時(shí)會(huì)回退為硬鏈接hard link并注釋說明此時(shí)卸載可能無法正常工作uninstallation currently does not work when hardlinks are used。在類 Unix 平臺(tái)上則統(tǒng)一使用符號(hào)鏈接因此卸載可以干凈地清除 shim。與配置文件、依賴源的聯(lián)動(dòng)install命令的版本說明/- 0.4.0指出它會(huì)考慮config.toml中配置的自定義 sources。全局工具的解析流程印證了這一點(diǎn)——rye/src/installer.rs 的install()首先讀取Config::current()通過ExpandedSources::from_sources()展開config.toml中的[[sources]]配置再將其傳入 uv 的安裝流程UvBuilder::with_sources()從而使工具安裝也遵循用戶配置的依賴源例如私有 PyPI 鏡像。config.toml位于.rye目錄其中的[default]段還控制著工具安裝的默認(rèn) Python 版本toolchain cpython3.11.1詳見 docs/guide/config.md。若不使用-p/--python顯式指定版本Rye 會(huì)使用default_toolchain()的返回值當(dāng)兩者都缺失時(shí)rye/src/cli/install.rs 會(huì)回退到 Python 3 的默認(rèn)請求。更詳細(xì)的依賴源說明可參考 Dependency Sources工具命令總覽見 rye tools 命令參考。小結(jié)Rye 的全局工具機(jī)制可以用一句話概括每個(gè)工具一個(gè)獨(dú)立虛擬環(huán)境一條 shim 打通全局 PATH。它的核心價(jià)值在于隔離每個(gè)工具擁有獨(dú)立的虛擬環(huán)境互不干擾也不會(huì)污染項(xiàng)目.venv便捷rye install一條命令即可完成安裝與 shim 生成裝完即可在任意目錄直接調(diào)用可修復(fù)性安裝失敗自動(dòng)回滾清理rye tools list能識(shí)別并標(biāo)注損壞的工具卸載時(shí)按需精確刪除 shim 與虛擬環(huán)境可配置性支持 PEP 508 requirement、git/url/path 多種來源、features 與--extra-requirement補(bǔ)充依賴、--include-dep安裝子依賴腳本并尊重config.toml中的依賴源與默認(rèn) toolchain 配置。對于希望長期穩(wěn)定使用一組 Python CLI 工具格式化、lint、代碼生成等的開發(fā)者來說rye install shim 的組合正是 Rye 提供無障礙 Python 體驗(yàn)a Hassle-Free Python Experience的重要一環(huán)。贊分享開發(fā)工具CLI【免費(fèi)下載鏈接】ryea Hassle-Free Python Experience項(xiàng)目地址https://gitcode.com/gh_mirrors/ry/rye點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Rye install 命令完全指南全局 Python 工具安裝與 shim 機(jī)制解析Rye install 命令完全指南全局 Python 工具安裝與 shim 機(jī)制解析 rye install 即 rye tools install 的別開發(fā)工具CLIrye 全局工具安裝完全指南深入解析 rye tools install 命令rye 全局工具安裝完全指南深入解析 rye tools install 命令 rye tools install 別名 rye install 是 ry開發(fā)工具CLIGo-Coreutils錯(cuò)誤處理與日志構(gòu)建健壯的命令行工具的終極指南Go Coreutils錯(cuò)誤處理與日志構(gòu)建健壯的命令行工具的終極指南 Go Coreutils作為GNU coreutils的跨平臺(tái)Go語言實(shí)現(xiàn)為開發(fā)者提供開發(fā)工具CLI上一篇APKMirror客戶端完整指南如何安全高效地管理安卓應(yīng)用版本下一篇Ruffle 的 swf crate在 Rust 中讀取與寫入 Adobe Flash SWF 文件創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考