View a markdown version of this page

使用 Elastic Beanstalk 上的需求檔案指定相依性 - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Elastic Beanstalk 上的需求檔案指定相依性

本主題說明如何設定應用程式以安裝其所需的其他 Python 套件。Python 應用程式通常與其他第三方 Python 套件具有相依性。使用 Elastic Beanstalk Python 平台,您可以透過多種方式指定應用程式依賴的 Python 套件。

使用 pip 和 requirements.txt

安裝 Python 套件的標準工具是 pip。它有一項功能可讓您於單一要求檔案內,指定所需的所有套件 (及其版本)。如需有關要求檔案的詳細資訊,請參閱 pip 文件網站上的要求檔案格式。

建立名為 requirements.txt 的檔案並將其置於原始碼套件的最上層目錄。以下是 Django 的範例 requirements.txt 檔案。

Django==2.2 mysqlclient==2.0.3

在您的開發環境中,您可以使用 pip freeze 命令來產生您的要求檔案。

~/my-app$ pip freeze > requirements.txt

為了確保您的要求檔案僅包含您應用程式實際使用的套件,請使用虛擬環境來安裝這些套件。在虛擬環境外,pip freeze 輸出將包含安裝於開發機器的所有 pip 套件,包括您的作業系統隨附的套件。

注意

在 Amazon Linux AMI Python 平台版本上,Elastic Beanstalk 本身不支援 Pipenv 或 Pipenv。如果您使用 Pipenv 管理應用程式相依性,請執行下列命令來產生 requirements.txt 檔案。

~/my-app$ pipenv lock -r > requirements.txt

若要進一步了解,請參閱 Pipenv 文件中的產生 requirements.txt。

使用 Pipenv 和 Pipfile

Pipenv 是一個現代化的 Python 套件工具。它將套件安裝與建立和管理相依性檔案以及應用程式的 virtualenv 結合在一起。如需詳細資訊,請參閱 Pipenv:適用於人類的 Python 開發工作流程。

Pipenv 會維護兩個檔案:

  • Pipfile — 此檔案包含各種類型的相依性和要求。

  • Pipfile.lock — 此檔案包含可啟用決定性組建的版本快照。

您可在開發環境中建立此類檔案,並將它們包含在您部署到 Elastic Beanstalk 之原始碼套件的最上層目錄中。如需有關這兩個檔案的詳細資訊,請參閱範例 Pipfile 和 Pipfile.lock。

下列範例使用 Pipenv 安裝 Django 和 Django REST 框架。這些命令會建立檔案 Pipfile 和 Pipfile.lock。

~/my-app$ pipenv install django ~/my-app$ pipenv install djangorestframework

優先順序

如果您包含本主題中描述的多個要求檔案,Elastic Beanstalk 只會使用其中一個。下列清單以遞減順序顯示優先順序。

  1. requirements.txt

  2. Pipfile.lock

  3. Pipfile

注意

從 2023 年 3 月 7 日 Amazon Linux 2 平台版本開始,如果您提供一個以上的此類檔案,Elastic Beanstalk 將發出主控台訊息,說明部署期間所使用的相依性檔案。

下列步驟說明了 Elastic Beanstalk 在部署執行個體時安裝相依性所遵循的邏輯。

  • 如果有 requirements.txt 檔案,我們將使用命令 pip install -r requirements.txt。

  • 從 2023 年 3 月 7 日 Amazon Linux 2 平台版本開始,如果沒有 requirements.txt 檔案,但有 Pipfile.lock 檔案,我們將使用命令 pipenv sync。在該版本之前,我們使用的是 pipenv install --ignore-pipfile。

  • 如果既沒有 requirements.txt 檔案,也沒有 Pipfile.lock 檔案,但有 Pipfile 檔案,我們將使用命令 pipenv install --skip-lock。

  • 如果找不到這三個要求檔案,我們不會安裝任何應用程式相依性。