У меня есть веб-приложение 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? Я делаю что-то не так с точки зрения версий и совместимости?
Я могу воспроизвести ту же проблему при использовании 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
Результат:
@JasonSusanto Вы можете попробовать использовать версию pandas 2.1.4 и проверить, работает ли она. Например: pandas==2.1.4
Судя по моему тесту, он также может работать в агенте, размещенном на Ubuntu MS.
@JasonSusanto Вы можете ознакомиться с обновлением в моем ответе.
@KevinLu-MFST спасибо за помощь. Я сделал свой как pandas==2.1.4, Python версии 3.12, databricks-sql-connector==3.1.0. И сборка заняла всего 2 минуты.
Рад знать, что это может помочь.
@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 кэширует и проверяет?
@JasonSusanto Да. Вы можете использовать кэш Python в Azure Pipelines. См. этот документ: Learn.microsoft.com/en-us/azure/devops/pipelines/release/…
Привет @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"