Python項(xiàng)目管理工具Rye的工作原理
pyproject.toml
pyproject.toml是PEP 518 提出的一種文件格式。 其中包含python項(xiàng)目構(gòu)建系統(tǒng)的要求,和項(xiàng)目的一些配置。 這有一篇文檔,展示了此文件的結(jié)構(gòu)。Declaring project metadata — Python Packaging User Guide 此文件可以由多個(gè)段落組成。其中project
段中的dependencies
表示項(xiàng)目的依賴。
rye philosophy
推薦看看這篇文章Philosophy - Rye (rye-up.com)這篇文章展示了rye的設(shè)計(jì)哲學(xué)。其中就包含了rye的一些優(yōu)點(diǎn)。例如
- 不用給虛擬環(huán)境安裝pip,就能管理依賴。
- 不使用系統(tǒng)的python。
Rye 的安裝和配置shell和基本使用方式
安裝和配置shell的方式
Installation - Rye (rye-up.com) 核心就是以下兩行。
curl -sSf https://rye-up.com/get | bash echo 'source "$HOME/.rye/env"' >> ~/.bashrc
第一行,是安裝。
- 從
https://rye-up.com/get
下載腳本,運(yùn)行。 - 腳本其中核心步驟是下載一個(gè)二進(jìn)制文件,運(yùn)行這個(gè)二進(jìn)制文件,來安裝。至于這個(gè)二進(jìn)制文件是如何把rye安裝到系統(tǒng)中的,文章后面再詳細(xì)闡述。
第二行,是配置shell(內(nèi)容是配置環(huán)境變量)。核心內(nèi)容是把$HOME/.rye/shims
添加到$PATH的最前面。
? ~ cat "$HOME/.rye/env" # rye shell setup case ":${PATH}:" in *:"$HOME/.rye/shims":*) ;; *) export PATH="$HOME/.rye/shims:$PATH" ;; esac
Rye實(shí)際上安裝了哪些東西
rye的安裝默認(rèn)路徑是~/.rye
。rye的大致目錄架構(gòu)如下(以下是我的電腦上安裝后用過幾次的。剛安裝時(shí)可能會少一些東西。):
? ~ tree -L 2 ~/.rye /home/xyc/.rye ├── env ├── pip-tools │?? ├── cpython@3.11 │?? └── cpython@3.9 ├── py │?? ├── cpython@3.10.11 │?? ├── cpython@3.11.3 │?? └── cpython@3.9.16 ├── self │?? ├── bin │?? ├── include │?? ├── lib │?? ├── lib64 -> lib │?? ├── pyvenv.cfg │?? └── tool-version.txt └── shims ├── python ├── python3 └── rye 13 directories, 6 files
rye是rust寫的,但是它利用了python能力。在這篇文章Philosophy - Rye (rye-up.com) 中,作者表示rye不使用系統(tǒng)安裝的python。這里的self文件,就是rye直接從GitHub - indygreg/python-build-standalone: Produce redistributable builds of Python 下載的已構(gòu)建的python。
基本使用方式
Basics - Rye (rye-up.com) 一般只要學(xué)會
- rye init <PROJECT_NAME>
- rye pin <PYTHON_VERSION>
- rye add <PACKAGE_NAME>
- rye sync 即可
Rye 的基本使用方式的工作原理
rye init
這個(gè)沒什么好闡述的。rye源碼里有模板。rye獲取一些信息,然后填到模板里,生成相關(guān)文件即可。
rye pin
把版本號寫在.python-servion文件里。至于.python-version有什么用,文章后面后講。
rye add
rye源代碼里有個(gè)腳本模板
const PACKAGE_FINDER_SCRIPT: &str = r#" ...省略一些代碼 finder = PackageFinder( index_urls=sources["index_urls"], find_links=sources["find_links"], trusted_hosts=sources["trusted_hosts"], ) ...省略一些代碼 print(json.dumps([x.as_json() for x in choices])) "#;
運(yùn)行rye add時(shí),rye把相應(yīng)的參數(shù)填到此代碼模板里,然后啟動(dòng)一個(gè)python解釋器,運(yùn)行py代碼,如果用戶提供的依賴名是可以正確的,就把依賴填到pyproject.toml里。
? learn_rye git:(master) ? rye add typer Added typer>=0.9.0 as regular dependency
rye sync
這個(gè)命令很關(guān)鍵。因?yàn)?,rye add只是把依賴填到pyproject.toml里,不會真的去安裝依賴。 rye sync會根據(jù)pyproject.toml的內(nèi)容,更新虛擬環(huán)境。如果還沒有虛擬環(huán)境,會創(chuàng)建一個(gè)。 rye sync的關(guān)鍵步驟如下
- 更新lock文件(這里不詳細(xì)闡述其中原理了)
- 如果rye自己使用的python,還沒有安裝pip-tools,安裝一下。
- 給pip-sync命令傳入相應(yīng)的參數(shù),運(yùn)行
以上就是rye的核心工作原理了。
rye的其它使用方式的工作原理。
Shims - Rye (rye-up.com) rye支持python +3.8 my-script.py
這種方式來運(yùn)行任意版本的python解釋器。
? ~ python +3.10 --version Python 3.10.11 ? ~ python +3.11 --version Python 3.11.3
原理是什么?
之前提到,安裝rye后要配置一下shell,使得在shell中,$HOME/.rye/shims
在PATH的最前面。這樣,‘python‘指向的就不是實(shí)際的python解釋器了,而是‘PATH的最前面。這樣,`python`指向的就不是實(shí)際的python解釋器了,而是`PATH的最前面。這樣,‘python‘指向的就不是實(shí)際的python解釋器了,而是‘HOME/.rye/shims/python`。
? ~ which python /home/xyc/.rye/shims/python
它會把命令轉(zhuǎn)發(fā)到指定版本的python解釋器中。
總結(jié)
本文簡單介紹了rye的工作原理。在研究它的工作原理的過程中,看了一下rye的源代碼??雌饋眄?xiàng)目不大,值得學(xué)習(xí)一下。
到此這篇關(guān)于Python項(xiàng)目管理工具Rye的工作原理的文章就介紹到這了,更多相關(guān)Python Rye工作原理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入掌握Python模塊創(chuàng)建導(dǎo)入和使用
這篇文章主要為大家介紹了深入掌握Python模塊創(chuàng)建導(dǎo)入和使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10pytorch中.to(device) 和.cuda()的區(qū)別說明
這篇文章主要介紹了pytorch中.to(device) 和.cuda()的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05python實(shí)現(xiàn)微信定時(shí)每天和女友發(fā)送消息
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)微信定時(shí)每天和女友發(fā)送消息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04python中將數(shù)據(jù)生成為Excel文件的5種方法舉例
工作中需要把數(shù)據(jù)導(dǎo)入到excel中,記錄一下操作方式,這篇文章主要給大家介紹了關(guān)于python中將數(shù)據(jù)生成為Excel文件的5種方法,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10Python秒算24點(diǎn)實(shí)現(xiàn)及原理詳解
這篇文章主要介紹了Python秒算24點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Python利用xlwt/openpyxl/xlutils實(shí)現(xiàn)寫入Excel數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Python如何利用xlwt/openpyxl/xlutils這些第三方庫實(shí)現(xiàn)寫入Excel數(shù)據(jù)功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11