Развертывание веб-приложения Python (Dash) в Azure, конвейер работает слишком долго, а колесо создания сообщений для панд все еще работает. Как оптимизировать?

У меня есть веб-приложение Python (Dash) со следующими требованиями.txt:

dash==2.17.0
numpy==1.26.4
pandas==1.5.3
dash-mantine-components==0.14.3
python-dotenv==1.0.1
dash-iconify==0.1.2
dash-bootstrap-components==1.6.0
pyspark==3.5.1
pytz==2024.1
package @ git+https://${GITHUB_TOKEN}:[email protected]/package
...

и внутри этого пакета это pip-файл:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
pandas = "==1.5.3"
pyspark = "==3.5.1"
... other dependencies

[dev-packages]

[requires]
python_version = "3.9"

А в Службе приложений Azure это конфигурация: стек Python с Python версии 3.12.

Но когда я запускаю конвейер в Azure DevOps для создания и развертывания веб-приложения, на каждый этап уходит не менее 20 минут. В основном этот шаг занимает так много времени (по крайней мере, около 10-12 минут):

  Building wheel for pandas (pyproject.toml): started
  Building wheel for pandas (pyproject.toml): still running...
  Building wheel for pandas (pyproject.toml): still running...
  Building wheel for pandas (pyproject.toml): still running...
  Building wheel for pandas (pyproject.toml): still running...
  Building wheel for pandas (pyproject.toml): still running...
  Building wheel for pandas (pyproject.toml): still running...
  Building wheel for pandas (pyproject.toml): still running...
  Building wheel for pandas (pyproject.toml): still running...
  Building wheel for pandas (pyproject.toml): still running...
  Building wheel for pandas (pyproject.toml): still running...

Наконец, это код, который я использовал для установки зависимостей Python в моем файле build&deploy.yml:

- script: |
        python -m venv antenv
        source antenv/bin/activate
        python -m pip install --upgrade pip
        pip install setup
        pip install --target = "./.python_packages/lib/site-packages" -r ./requirements.txt
      displayName: 'Install Python dependencies'

Кроме того, при сборке и развертывании используется Python версии 3.12, versionSpec: '3.12'.

Есть ли способ оптимизировать развертывание приложения Python в Azure с помощью конвейера Azure DevOps? Я делаю что-то не так с точки зрения версий и совместимости?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я могу воспроизвести ту же проблему при использовании pandas==1.5.3 и Python 3.12.

pandas==1.5.3 колеса не создаются для вашей версии, поэтому ваша система каждый раз создает их для себя. Это займет много времени. Вы можете проверить доступные файлы для загрузки здесь.

Чтобы решить эту проблему, вы можете обновить версию pandas до 2.2.2.

Например:

dash==2.17.0
numpy==1.26.4
pandas==2.2.2
dash-mantine-components==0.14.3
python-dotenv==1.0.1
dash-iconify==0.1.2
dash-bootstrap-components==1.6.0
pyspark==3.5.1
pytz==2024.1

Тогда шаг установки пакета будет оптимизирован.

Результат:

Для получения более подробной информации вы можете обратиться к примечанию к выпуску: pandas 2.2.2

Обновлять:

Поскольку вам необходимо использовать pandas <2.2.0, вы можете использовать версию Pandas 2.1.4.

Например:

pandas==2.1.4

Для получения более подробной информации вы можете обратиться к файлам для загрузки в pandas 2.1.4

Результат:

Привет @KevinLu-MFST, спасибо за ответ. Если я использую databricks-sdk==0.27.1 и databricks-sql-connector==3.1.0, это указывает, что у меня должны быть pandas<2.2.0. Решает ли pandas<2.2.0 и эту проблему? Потому что у меня возникла такая проблема: The conflict is caused by: The user requested pandas==2.2.0 databricks-sql-connector 3.1.0 depends on pandas<2.2.0 and >=1.2.5; python_version >= "3.8"

Jason Susanto 27.06.2024 05:55

@JasonSusanto Вы можете попробовать использовать версию pandas 2.1.4 и проверить, работает ли она. Например: pandas==2.1.4 Судя по моему тесту, он также может работать в агенте, размещенном на Ubuntu MS.

Kevin Lu-MSFT 27.06.2024 06:22

@JasonSusanto Вы можете ознакомиться с обновлением в моем ответе.

Kevin Lu-MSFT 27.06.2024 06:56

@KevinLu-MFST спасибо за помощь. Я сделал свой как pandas==2.1.4, Python версии 3.12, databricks-sql-connector==3.1.0. И сборка заняла всего 2 минуты.

Jason Susanto 27.06.2024 08:19

Рад знать, что это может помочь.

Kevin Lu-MSFT 27.06.2024 08:20

@KevinLu-MFST, просто интересно, поскольку конвейер сборки и развертывания теперь занимает в общей сложности 12 минут, будет ли возможность улучшить его, выполнив что-то вроде кэширования установленных зависимостей, чтобы вместо запуска этого скрипта каждый раз:- script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setup pip install --target = "./.python_packages/lib/site-packages" -r ./requirements.txt displayName: 'Install Python dependencies' build кэширует и проверяет?

Jason Susanto 28.06.2024 03:07

@JasonSusanto Да. Вы можете использовать кэш Python в Azure Pipelines. См. этот документ: Learn.microsoft.com/en-us/azure/devops/pipelines/release/…

Kevin Lu-MSFT 29.06.2024 06:54

Другие вопросы по теме