<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python環(huán)境管理大比拼:pip、Conda、Pyenv、Rye、Virtualenv、PDM、Poetry等工具

          共 16659字,需瀏覽 34分鐘

           ·

          2024-05-06 07:58

          ??我的小冊(cè) 45章教程:(小白零基礎(chǔ)用Python量化股票分析小冊(cè)) ,原價(jià)299,限時(shí)特價(jià)2杯咖啡,滿100人漲10元。

          原文:https://alpopkes.com/posts/python/packaging_tools

          譯文:https://juejin.cn/post/7325611798135767090 

          譯者:hashcon 作者在 EuroPython 2023 上的演講:https://www.youtube.com/watch?v=3-drZY3u5vo 譯者做的視頻翻譯版本:https://www.bilibili.com/video/BV1EC4y1C7f8

          背景知識(shí)

          當(dāng)我開始使用 Python 并創(chuàng)建我的第一個(gè)包時(shí),我很困惑。創(chuàng)建和管理包似乎比我預(yù)想的要困難得多。此外,存在多種工具,但我不確定該使用哪一種。我相信你們大多數(shù)人過去都遇到過同樣的問題。Python 有無數(shù)的工具來管理虛擬環(huán)境和創(chuàng)建包,但很難(或幾乎不可能)了解哪一個(gè)適合您的需求。存在一些關(guān)于該主題的演講和博客文章,但它們都沒有給出完整的概述或以結(jié)構(gòu)化的方式評(píng)估這些工具。這就是這篇文章的主題。

          工具分類

          本文劃分五個(gè)對(duì)于環(huán)境和包管理方面很重要的類別:

          • Python 版本管理
          • 包管理
          • 環(huán)境管理(主要涉及虛擬環(huán)境)
          • 包構(gòu)建
          • 包發(fā)布

          正如下面的維恩圖中所示,存在很多工具。有些是單一用途的,有些是多面手:

          讓我們從開發(fā)人員的角度來瀏覽一下這些類別:假設(shè)您同時(shí)處理個(gè)人項(xiàng)目和工作項(xiàng)目。在工作中,您使用的是 Python 3.7,而您的個(gè)人項(xiàng)目應(yīng)該使用最新的 Python 版本(當(dāng)前為 3.11)。換句話說:您希望能夠安裝不同的 Python 版本并在它們之間進(jìn)行切換。這就是我們的第一個(gè)類別,Python 版本管理的內(nèi)容。

          在您的項(xiàng)目中,您正在使用其他軟件包(例如 pandas 或 sklearn 用于數(shù)據(jù)科學(xué))。這些是您必須安裝和管理的項(xiàng)目的依賴項(xiàng)(例如,在發(fā)布新版本時(shí)進(jìn)行升級(jí))。這就是包管理的意義所在。

          由于不同的項(xiàng)目可能需要同一包的不同版本,因此您需要?jiǎng)?chuàng)建(和管理)虛擬環(huán)境以避免依賴沖突。用于此目的的工具收集在環(huán)境管理類別中。大多數(shù)工具使用虛擬環(huán)境,但有些工具使用另一個(gè)稱為 “本地包”(Local Packages) 的概念,我們稍后會(huì)討論。

          您可能希望與其他開發(fā)人員共享您的代碼。為此,您首先必須構(gòu)建包(包構(gòu)建),然后才能將其發(fā)布到 PyPI 或其他索引(包發(fā)布)。

          下面我們將更詳細(xì)地了解每個(gè)類別,包括簡短的定義、動(dòng)機(jī)和可用的工具。我將在最后的單獨(dú)部分中更詳細(xì)地介紹一些單一用途工具和一些多用途工具。我們先從第一類開始:Python 版本管理。

          Python版本管理

          定義

          一個(gè)可以進(jìn)行 Python 版本管理的工具,可以讓你輕松安裝 Python 版本并在它們之間切換。

          動(dòng)機(jī)

          為什么我們要使用不同的 Python 版本?有幾個(gè)原因。例如,您可能正在處理多個(gè)項(xiàng)目,其中每個(gè)項(xiàng)目都需要不同的 Python 版本。或者,您可能開發(fā)一個(gè)支持多個(gè) Python 版本的項(xiàng)目,并且想要測試所有版本。除此之外,檢查最新的 Python 版本所提供的功能,或者測試 Python 的預(yù)發(fā)布版本是否存在錯(cuò)誤也是不錯(cuò)的選擇。

          工具

          我們的維恩圖顯示了可用于 Python 版本管理的工具:pyenv, conda, rye 和 PyFlow。我們將首先在單獨(dú)的部分中查看 pyenv 并考慮多用途工具。

          Python 自帶一個(gè)單一用途的工具,可讓您安裝和管理 Python 版本:pyenv!Pyenv 很容易使用。最重要的命令如下:

          # 安裝特定版本的 Python
          pyenv install 3.10.4

          # 在不同的 Python 版本之間切換

          # 僅針對(duì)當(dāng)前 shell 切換 Python 版本
          pyenv shell <version> 
          # 在這個(gè)目錄下,自動(dòng)使用某個(gè) Python 版本
          pyenv local <version> 
          # 針對(duì)當(dāng)前用戶,全局設(shè)定 Python 版本
          pyenv global <version> 

          (虛擬)環(huán)境管理

          定義

          環(huán)境管理工具,允許您創(chuàng)建和管理(虛擬)環(huán)境。

          動(dòng)機(jī)

          為什么我們首先要使用環(huán)境?正如一開始提到的,項(xiàng)目有特定的要求(即它們依賴于其他包)。通常情況下,不同的項(xiàng)目需要同一包的不同版本。這可能會(huì)導(dǎo)致依賴沖突。此外,使用 pip install 安裝包時(shí)可能會(huì)出現(xiàn)問題,因?yàn)樵摪c系統(tǒng)范圍的 Python 安裝一起放置。其中一些問題可以通過使用命令 --user 中的標(biāo)志來解決。然而,這個(gè)選項(xiàng)可能并不是每個(gè)人都知道,尤其是初學(xué)者。

          工具

          許多工具允許用戶創(chuàng)建和管理環(huán)境。它們是:venv, virtualenv, pipenv, conda, pdm, poetry, hatch, rye 和 PyFlow。其中只有兩個(gè)是單一用途工具:venv 和 virtualenv。讓我們先來看看這兩個(gè):

          venv

          venv(docs.python.org/3/library/v…) 是用于創(chuàng)建虛擬環(huán)境的內(nèi)置 Python 包。最重要的命令如下:

          # 創(chuàng)建一個(gè)新的環(huán)境
          python3 -m venv <env_name>

          # 使用這個(gè)環(huán)境
          . <env_name>/bin/activate

          # 關(guān)閉這個(gè)環(huán)境
          deactivate

          virtualenv

          virtualenv (virtualenv.pypa.io/en/latest/)嘗試改進(jìn) venv. 它提供的功能更多,速度更快,功能更強(qiáng)大。最重要的命令與 venv 基本一樣:

          # 創(chuàng)建一個(gè)新環(huán)境
          virtualenv <env_name>

          # 啟用這個(gè)環(huán)境
          . <env_name>/bin/activate

          # 關(guān)閉這個(gè)環(huán)境
          deactivate

          包管理

          pyproject.toml

          在我們討論打包之前,我想確保您了解打包最重要的文件:pyproject.toml.

          Python 的打包已經(jīng)取得了長足的進(jìn)步,在 PEP 518 之前,setup.py 文件用于打包,setuptools 作為構(gòu)建工具。PEP 518 引入了 pyproject.toml 文件的用法。因此,在創(chuàng)建包時(shí)始終需要一個(gè) pyproject.toml 文件,用于定義項(xiàng)目的設(shè)置、定義元數(shù)據(jù)和許多其他內(nèi)容。一個(gè)示例是 pandas 的 pyproject.toml 文件:

          github.com/pandas-dev/…

          [build-system]
          # Minimum requirements for the build system to execute.
          # See https://github.com/scipy/scipy/pull/12940 for the AIX issue.
          requires = [
              "meson-python==0.13.1",
              "meson==1.2.1",
              "wheel",
              "Cython==3.0.5",  # Note: sync with setup.py, environment.yml and asv.conf.json
              # Any NumPy version should be fine for compiling.  Users are unlikely
              # to get a NumPy<1.25 so the result will be compatible with all relevant
              # NumPy versions (if not it is presumably compatible with their version).
              # Pin <2.0 for releases until tested against an RC.  But explicitly allow
              # testing the `.dev0` nightlies (which require the extra index).
              "numpy>1.22.4,<=2.0.0.dev0",
              "versioneer[toml]"
          ]

          build-backend = "mesonpy"

          [project]
          name = 'pandas'
          dynamic = [
            'version'
          ]
          description = 'Powerful data structures for data analysis, time series, and statistics'
          readme = 'README.md'
          authors = [
            { name = 'The Pandas Development Team', email='[email protected]' },
          ]
          license = {file = 'LICENSE'}
          requires-python = '>=3.9'
          dependencies = [
            "numpy>=1.22.4; python_version<'3.11'",
            "numpy>=1.23.2; python_version=='3.11'",
            "numpy>=1.26.0; python_version>='3.12'",
            "python-dateutil>=2.8.2",
            "pytz>=2020.1",
            "tzdata>=2022.7"
          ]
          classifiers = [
          # 省略后續(xù)

          .lock 文件

          還有一個(gè)對(duì)于打包很重要的文件:鎖定文件(xxx.lock)。pyproject.toml 包含抽象依賴關(guān)系,鎖定文件包含具體依賴關(guān)系。它記錄了為項(xiàng)目安裝的所有依賴項(xiàng)的確切版本(例如 pandas==2.0.3)。這使得項(xiàng)目在多個(gè)平臺(tái)上具有可重復(fù)性,例如下面的 github.com/python-poet…:

          # This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.

          [[package]]
          name = "build"
          version = "1.0.3"
          description = "A simple, correct Python build frontend"
          optional = false
          python-versions = ">= 3.7"
          files = [
              {file = "build-1.0.3-py3-none-any.whl"hash = "sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f"},
              {file = "build-1.0.3.tar.gz"hash = "sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b"},
          ]

          [package.dependencies]
          colorama = {version = "*", markers = "os_name == \"nt\""}
          importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""}
          packaging = ">=19.0"
          pyproject_hooks = "*"
          tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}

          [package.extras]
          docs = ["furo (>=2023.08.17)""sphinx (>=7.0,<8.0)""sphinx-argparse-cli (>=1.5)""sphinx-autodoc-typehints (>=1.10)""sphinx-issues (>=3.0.0)"]
          test = ["filelock (>=3)""pytest (>=6.2.4)""pytest-cov (>=2.12)""pytest-mock (>=2)""pytest-rerunfailures (>=9.1)""pytest-xdist (>=1.34)""setuptools (>=42.0.0)""setuptools (>=56.0.0)""setuptools (>=56.0.0)""setuptools (>=67.8.0)""wheel (>=0.36.0)"]
          typing = ["importlib-metadata (>=5.1)""mypy (>=1.5.0,<1.6.0)""tomli""typing-extensions (>=3.7.4.3)"]
          virtualenv = ["virtualenv (>=20.0.35)"]

          定義

          包管理工具能夠下載和安裝庫及其依賴項(xiàng)。

          動(dòng)機(jī)

          為什么我們需要包?包允許我們定義模塊的層次結(jié)構(gòu)并使用"."語法,例如 from package.module import my_function 輕松訪問模塊。此外,它們還可以輕松地與其他開發(fā)人員共享代碼。由于每個(gè)包都包含一個(gè) pyproject.toml 定義其依賴項(xiàng)的文件,因此其他開發(fā)人員不必單獨(dú)安裝所需的包,而只需從其 pyproject.toml 文件中安裝該包即可。

          工具

          許多工具可以執(zhí)行包管理:pip, pipx, pipenv, conda, pdm, poetry, rye 和 PyFlow.

          其中,pip 可能是最眾所周知的,它也是這里的專門只用來做包管理的工具。

          Python 的標(biāo)準(zhǔn)包管理器是 pip(pip.pypa.io/en/stable/),它隨 Python 一起提供,并允許您從 PyPI 和其他索引安裝包。主要命令(可能是 Python 開發(fā)人員學(xué)習(xí)的第一個(gè)命令之一)是 pip install <package_name>

          多用途工具

          接下來進(jìn)入非單一用途的工具

          pipenv

          顧名思義,pipenv 結(jié)合了 pip 和 virtualenv。它可以執(zhí)行虛擬環(huán)境管理和包管理,正如我們?cè)诰S恩圖中看到的那樣:

          pipenv 引入兩個(gè)附加文件:

          • Pipfile:是一個(gè) toml 文件(類似于 pyproject.toml),用于定義項(xiàng)目依賴項(xiàng)
          • Pipfile.lock:允許確定性構(gòu)建。它消除了對(duì) requirements.txt 文件的需要,并通過鎖定操作自動(dòng)管理。

          最重要的pipenv命令是:

          # 安裝某個(gè)包
          pipenv install <package_name>

          # 在虛擬環(huán)境運(yùn)行某個(gè)腳本
          pipenv run <script_name.py>

          # 啟用虛擬環(huán)境
          pipenv shell

          Conda

          Conda 是一個(gè)通用的包管理系統(tǒng)。這意味著它不限于 Python 包。Conda 是一個(gè)具有很多功能的巨大工具。存在很多教程和博客文章(例如官方的),因此我不會(huì)在這里詳細(xì)介紹。但是,我想提一件事:雖然可以構(gòu)建和發(fā)布包,但 conda 我沒有將該工具包含在適當(dāng)?shù)念悇e中。這是因?yàn)榇虬?conda 工作方式略有不同,并且生成的包將是 conda 包。

          特征評(píng)估

          接下來我將比較不同工具的以下維度的特點(diǎn):

          • 該工具是否管理依賴關(guān)系?
          • 它是否解析/鎖定依賴關(guān)系?
          • 是否有干凈的構(gòu)建/發(fā)布流程?
          • 它允許使用插件嗎?
          • 它支持 PEP 660(可編輯安裝:peps.python.org/pep-0660/)嗎?PEP 660 是關(guān)于基于構(gòu)建的可編輯安裝 pyproject.toml。當(dāng)您使用安裝軟件包時(shí),pip 您可以選擇使用 pip install -e package_name 來以可編輯模式安裝它。當(dāng)您開發(fā)包并希望您的更改直接反映在您的環(huán)境中時(shí),這是一個(gè)重要的功能。
          • 它支持 PEP 621(項(xiàng)目元數(shù)據(jù):peps.python.org/pep-0621/)嗎?PEP 621 指定如何在 pyproject.toml 文件中寫入項(xiàng)目的核心元數(shù)據(jù)。我添加這個(gè)評(píng)判維度是因?yàn)橐粋€(gè)包(劇透:它是 poetry)當(dāng)前不支持此 PEP,但使用自己的方式來聲明元數(shù)據(jù)。

          Flit

          Flit(flit.pypa.io/en/stable/)嘗試創(chuàng)建一種簡單的方法將 Python 包和模塊放在 PyPI 上。它有一個(gè)非常具體的用例:它旨在用于打包純 Python 包(即沒有構(gòu)建步驟的包)。它不關(guān)心任何其他任務(wù):

          • Python版本管理:?
          • 包管理:?
          • 環(huán)境管理:?
          • 構(gòu)建包:?
          • 發(fā)布包:?

          這也反映在我們的維恩圖中:

          • 該工具是否管理依賴關(guān)系??
          • 它是否解析/鎖定依賴關(guān)系??
          • 是否有干凈的構(gòu)建/發(fā)布流程??
          • 它允許使用插件嗎??
          • 它支持 PEP 660 嗎??
          • 它支持 PEP 621 嗎??

          主要命令有:

          # 創(chuàng)建新的 pyproject.toml
          flit init

          # 構(gòu)建并發(fā)布 
          flit publish

          Poetry

          Poetry 是眾所周知的工具。正如維恩圖中所示,它可以執(zhí)行除 Python 版本管理之外的所有操作:

          • Python版本管理:?
          • 包管理:?
          • 環(huán)境管理:?
          • 構(gòu)建包:?
          • 發(fā)布包:?

          Poetry 不支持 PEP 621。GitHub 上關(guān)于此問題的開放問題已有大約 1.5 年的時(shí)間,但還是沒有解決(github.com/python-poet…)。

          • 該工具是否管理依賴關(guān)系??
          • 它是否解析/鎖定依賴關(guān)系??
          • 是否有干凈的構(gòu)建/發(fā)布流程??
          • 它允許使用插件嗎??
          • 它支持 PEP 660 嗎??
          • 它支持 PEP 621 嗎??

          主要命令:

          # 創(chuàng)建目錄結(jié)構(gòu)和 pyproject.toml
          poetry new <project_name>

          # 交互式創(chuàng)建 pyproject.toml
          poetry init

          # 從 pyproject.toml 安裝依賴
          poetry install

          依賴管理:

          # Add dependency
          poetry add <package_name>

          # Display all dependencies
          poetry show --tree
          運(yùn)行代碼
          # Activate virtual env
          poetry shell

          # Run script within virtual env
          poetry run python <script_name.py>

          鎖定文件:首次安裝軟件包時(shí),Poetry 會(huì)解析 pyproject.toml 文件中列出的所有依賴項(xiàng)并下載最新版本的軟件包。一旦 Poetry 完成安裝,它將所有包和下載的確切版本寫入一個(gè) poetry.lock 文件,將項(xiàng)目鎖定到這些特定版本。建議將鎖定文件提交到您的項(xiàng)目存儲(chǔ)庫,以便所有從事該項(xiàng)目的人員都被鎖定到相同版本的依賴項(xiàng)。要將依賴項(xiàng)更新到最新版本,請(qǐng)使用以下命令:

          poetry update

          構(gòu)建/發(fā)布流程:

          # 打包 (創(chuàng)建 `.tar.gz` 和 `.whl`)
          poetry build

          # 發(fā)布到 PyPI
          poetry publish 

          pdm

          pdm 是一個(gè)相對(duì)較新的包和依賴項(xiàng)管理器(于 2019 年開始),受到 Poetry 和 PyFlow 的啟發(fā)。您會(huì)注意到,我在本文中并沒有討論 PyFlow。這是因?yàn)?PyFlow 不再活躍,這不再適合快速發(fā)展的打包工具領(lǐng)域。作為一種新工具,pdm 需要 Python 3.7 或更高版本。與其他工具的另一個(gè)區(qū)別是 pdm 允許用戶選擇構(gòu)建后端。

          pdm 是唯一在本地包上實(shí)現(xiàn) PEP 582 的工具(除 PyFlow 之外) ,這是實(shí)現(xiàn)環(huán)境管理的替代方法。請(qǐng)注意,此 PEP 最近被拒絕了。

          從維恩圖中可以看出,pdm 位于 Poetry 旁邊。這意味著它可以做除 Python 版本管理之外的所有事情:

          • Python版本管理:?
          • 包管理:?
          • 環(huán)境管理:?
          • 構(gòu)建包:?
          • 發(fā)布包:?

          pdm 的主要命令與 poetry 類似。然而,目前的命令還是比較少。例如,目前沒有 pdm shell 或 pdm new

          • 該工具是否管理依賴關(guān)系??
          • 它是否解析/鎖定依賴關(guān)系??
          • 是否有干凈的構(gòu)建/發(fā)布流程??
          • 它允許使用插件嗎??
          • 它支持 PEP 660 嗎??
          • 它支持 PEP 621 嗎??

          創(chuàng)建一個(gè)新項(xiàng)目

          # 交互式創(chuàng)建 pyproject.toml 
          pdm init

          # 從 pyproject.toml 安裝包
          pdm install

          依賴管理

          # 添加依賴
          pdm add <package_name>

          # 展示所有依賴
          pdm list --graph

          運(yùn)行代碼

          # 沒有 shell 命令 

          # 使用當(dāng)前環(huán)境運(yùn)行
          pdm run python <script_name.py>

          鎖定文件:pdm 的鎖定功能與 poetry 類似。首次安裝軟件包時(shí),pdm 會(huì)解析 pyproject.toml 文件中列出的所有依賴項(xiàng)并下載最新版本的軟件包。pdm 完成安裝后,會(huì)將所有包及其下載的確切版本寫入文件中 pdm.lock,從而將項(xiàng)目鎖定到這些特定版本。建議將鎖定文件提交到您的項(xiàng)目存儲(chǔ)庫,以便所有從事該項(xiàng)目的人員都被鎖定到相同版本的依賴項(xiàng)。要將依賴項(xiàng)更新到最新版本,請(qǐng)使用以下命令:

          pdm update

          構(gòu)建/發(fā)布流程:

          # 打包 (創(chuàng)建 `.tar.gz` 和 `.whl`)
          pdm build

          # 發(fā)布到 PyPI
          pdm publish 

          Hatch

          Hatch(hatch.pypa.io/latest/):

          • Python版本管理:?
          • 包管理:?
          • 環(huán)境管理:?
          • 構(gòu)建包:?
          • 發(fā)布包:?

          值得注意的是,Hatch 的作者承諾將很快添加鎖定功能(github.com/pypa/hatch/…)。當(dāng)您閱讀本文時(shí),請(qǐng)務(wù)必檢查 Hatch 的最新版本,看看是否已實(shí)現(xiàn)此功能。

          • 該工具是否管理依賴關(guān)系??
          • 它是否解析/鎖定依賴關(guān)系??
          • 是否有干凈的構(gòu)建/發(fā)布流程??
          • 它允許使用插件嗎??
          • 它支持 PEP 660(可編輯安裝)嗎??
          • 它支持 PEP 621(項(xiàng)目元數(shù)據(jù))嗎??

          創(chuàng)建一個(gè)新項(xiàng)目

          # 創(chuàng)建目錄結(jié)構(gòu)以及 pyproject.toml
          hatch new <project_name>

          # 交互式創(chuàng)建項(xiàng)目
          hatch new -i <project_name>

          # 初始化現(xiàn)有項(xiàng)目或者創(chuàng)建 pyproject.toml
          hatch new --init

          依賴管理

          # 沒有 add 命令,依賴需要手動(dòng)添加到 pyproject.toml

          # 展示依賴
          hatch dep show table

          運(yùn)行代碼

          # 啟用虛擬環(huán)境
          hatch shell

          # 在虛擬環(huán)境運(yùn)行腳本
          hatch run python <script_name.py>

          構(gòu)建/發(fā)布流程

          #  打包 (創(chuàng)建 `.tar.gz` 和 `.whl`)
          hatch build

          # 發(fā)布到 PyPI
          hatch publish 

          聲明式環(huán)境管理:Hatch 的特別之處在于它允許您在文件中配置虛擬環(huán)境 pyproject.toml。此外,它還允許您專門為環(huán)境定義腳本。示例用例是代碼格式化(hatch.pypa.io/1.1/config/…)。

          Rye

          Rye 最近由 Flask 框架的創(chuàng)建者 Armin Ronacher 開發(fā)(首次發(fā)布于 2023 年 5 月)。它受到編程語言 Rust 的打包工具 rustup 和 cargo 的強(qiáng)烈啟發(fā)。Rye 是用 Rust 編寫的,能夠執(zhí)行維恩圖中的所有任務(wù):

          • Python版本管理:?
          • 包管理:?
          • 環(huán)境管理:?
          • 構(gòu)建包:?
          • 發(fā)布包:?

          目前,Rye 沒有插件接口。但是,由于定期發(fā)布新版本,因此將來可能會(huì)添加此內(nèi)容。

          • 該工具是否管理依賴關(guān)系??
          • 它是否解析/鎖定依賴關(guān)系??
          • 是否有干凈的構(gòu)建/發(fā)布流程??
          • 它允許使用插件嗎??
          • 它支持 PEP 660(可編輯安裝)嗎??
          • 它支持 PEP 621(項(xiàng)目元數(shù)據(jù))嗎??

          創(chuàng)建一個(gè)新項(xiàng)目:

          # 創(chuàng)建目錄結(jié)構(gòu)以及 pyproject.toml
          rye init <project_name>

          # 指定一個(gè) Python 本本
          rye pin 3.10

          依賴管理:

          # 添加依賴,但是還沒有安裝
          rye add <package_name>

          # 同步虛擬環(huán)境, 鎖定文件等等
          # 在這個(gè)步驟安裝依賴
          rye sync

          運(yùn)行代碼:

          # 啟動(dòng)虛擬環(huán)境
          rye shell

          # 使用虛擬環(huán)境運(yùn)行腳本
          rye run python <script_name.py>

          構(gòu)建/發(fā)布流程:

          # 打包 (創(chuàng)建 `.tar.gz` 和 `.whl`)
          rye build

          # 發(fā)布到 PyPI
          rye publish 

          總結(jié)


          Flit Poetry pdm Hatch rye
          該工具是否管理依賴關(guān)系 ? ? ? ? ?
          它是否解析/鎖定依賴關(guān)系 ? ? ? ? ?
          是否有干凈的構(gòu)建/發(fā)布流程 ? ? ? ? ?
          它允許使用插件嗎 ? ? ? ? ?
          它支持 PEP 660(可編輯安裝)嗎 ? ? ? ? ?
          它支持 PEP 621(項(xiàng)目元數(shù)據(jù))嗎 ? ? ? ? ?


          最后推薦一下我們團(tuán)隊(duì)寫的量化小冊(cè)的內(nèi)容,45篇內(nèi)容!從Python安裝,入門,數(shù)據(jù)分析,爬取股票基金的歷史+實(shí)時(shí)數(shù)據(jù),以及如何寫一個(gè)簡單量化策略,策略回測,如何看資金曲線統(tǒng)統(tǒng)都有介紹!非常超值!

          歡迎訂閱:原價(jià)299 早鳥價(jià)2杯咖啡錢,即可永久閱讀。滿400人又要漲價(jià)了,現(xiàn)在的價(jià)格非常非常低,只要2杯奶茶,就可以終身訂閱+課程源碼,還有永久陪伴群。48小時(shí)無理由退款,放心食用!


          往期推薦

          量化: 如何用Python爬取創(chuàng)業(yè)板歷史+實(shí)時(shí)股票數(shù)據(jù)!實(shí)戰(zhàn)股票分析篇利用Pandas 9招挖掘五糧液股價(jià)實(shí)戰(zhàn)股票數(shù)據(jù)分析篇 Pandas滾動(dòng)操作 |量化股票第一步,用Python畫股票K線,雙均線圖,可視化你的股票數(shù)據(jù)!如何用Python爬取全部800多只ETF基金數(shù)據(jù)!如何用Python寫一個(gè)雙均線策略 |如何用Python開發(fā)一個(gè)多策略機(jī)器人!上篇!Python量化系列-用布林策略買五糧液能賺多少錢?只要4秒鐘!用Python 獲取上證指數(shù)34年的歷史日線數(shù)據(jù)!


          入門: 最全的零基礎(chǔ)學(xué)Python的問題  | 零基礎(chǔ)學(xué)了8個(gè)月的Python  | 實(shí)戰(zhàn)項(xiàng)目 |學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評(píng),電影《后來的我們》 | 38年NBA最佳球員分析 |   從萬眾期待到口碑撲街!唐探3令人失望  | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個(gè)海量小姐姐素描圖 |碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


          趣味:彈球游戲  | 九宮格  | 漂亮的花 | 兩百行Python《天天酷跑》游戲!

          AI: 會(huì)做詩的機(jī)器人 | 給圖片上色 | 預(yù)測收入 | 碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影

          小工具: Pdf轉(zhuǎn)Word,輕松搞定表格和水印! | 一鍵把html網(wǎng)頁保存為pdf!|  再見PDF提取收費(fèi)! | 用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換 | 制作一款釘釘?shù)蛢r(jià)機(jī)票提示器! |60行代碼做了一個(gè)語音壁紙切換器天天看小姐姐!

          瀏覽 168
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一区二三区三区四区五区视频 | 男女操逼视频网站 | 麻豆av无码久久精品 | 91福利区 | 毛片链接 |