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