Azure / Azure/azure-sdk-for-python
AML SDK v1: regression: no longer possible to use private pip repository
- Dominant language
- Python
- Stars
- 5.6k
- Forks
- 3.4k
- Avg merge
- 1d 21h
- Merged PRs (30d)
- 193
Description
- **Package Name**: azureml-sdk
- **Package Version**: 1.60.0
- **Operating System**: Windows 11
- **Python Version**: 3.10.8
**Describe the bug**
We were using `azureml-sdk==1.55.0`, where this was working. Updating to `azureml-sdk==1.60.0` breaks the ability to build images connecting to a private pip repository hosted on ADO Artifacts.
We use a workspace connection to hold a private key for our ADO Artifact store, which is configured as a Central Feed Service to cache our pip packages.
We use `pip_indexurl` in our CondaDependencies to force the Conda environment to use our private artifact store. This used to turn into an `--index-url` command line flag to PIP, but now with the latest SDK this turns into `--find-links`.
Unfortunately, this configuration leads pip to only look at the public pypi server, and it does not consult our private artifact store, so image builds fail.
**To Reproduce**
Steps to reproduce the behavior:
1. Configure a private ADO artifact store to chain upstream to pypi.
2. Create an AML environment with CondaDependencies including pip_indexurl set to the private ADO artifact store.
3. Configure a workspace connection for the private ADO store with a valid access token.
4. Build the environment.
5. Notice the build fails, with a misleading error about missing python version:
```
2025-06-27T10:32:52: #10 80.63 ERROR: Ignored the following versions that require a different python version: 0.36.0 Requires-Python >=3.6,<3.10; 0.37.0 Requires-Python >=3.7,<3.10; 1.10.0 Requires-Python >=3.5,<3.9; 1.10.0.post1 Requires-Python >=3.5,<3.9; 1.10.0.post2 Requires-Python >=3.5,<3.9; 1.11.0 Requires-Python >=3.5,<3.9; 1.11.0.post1 Requires-Python >=3.5,<3.9; 1.11.0.post2 Requires-Python >=3.5,<3.9; 1.12.0 Requires-Python >=3.5,<3.9; 1.12.0.post1 Requires-Python >=3.5,<3.9; 1.12.0.post2 Requires-Python >=3.5,<3.9; 1.13.0 Requires-Python >=3.5,<3.9; 1.13.0.post1 Requires-Python >=3.5,<3.9; 1.13.0.post2 Requires-Python >=3.5,<3.9; 1.14.0 Requires-Python >=3.5,<3.9; 1.14.0.post1 Requires-Python >=3.5,<3.9; 1.14.0.post2 Requires-Python >=3.5,<3.9; 1.15.0 Requires-Python >=3.5,<3.9; 1.15.0.post1 Requires-Python >=3.5,<3.9; 1.16.0 Requires-Python >=3.5,<3.9; 1.16.0.post1 Requires-Python >=3.5,<3.9; 1.16.0.post2 Requires-Python >=3.5,<3.9; 1.17.0 Requires-Python >=3.5,<3.9; 1.17.0.post1 Requires-Python >=3.5,<3.9; 1.18.0 Requires-Python >=3.5,<3.9; 1.18.0.post1 Requires-Python >=3.5,<3.9; 1.18.0.post2 Requires-Python >=3.5,<3.9; 1.18.0.post3 Requires-Python >=3.5,<3.9; 1.18.0.post4 Requires-Python >=3.5,<3.9; 1.19.0 Requires-Python >=3.5,<3.9; 1.2.0 Requires-Python >=3.5,<3.9; 1.2.0.post1 Requires-Python >=3.5,<3.9; 1.2.0.post2 Requires-Python >=3.5,<3.9; 1.2.0.post3 Requires-Python >=3.5,<3.9; 1.20.0 Requires-Python >=3.5,<3.9; 1.20.0.post1 Requires-Python >=3.5,<3.9; 1.21.0 Requires-Python >=3.5,<3.9; 1.21.0.post1 Requires-Python >=3.5,<3.9; 1.21.0.post2 Requires-Python >=3.5,<3.9; 1.22.0 Requires-Python >=3.5,<3.9; 1.22.0.post1 Requires-Python >=3.5,<3.9; 1.23.0 Requires-Python >=3.5,<3.9; 1.23.0.post1 Requires-Python >=3.5,<3.9; 1.24.0 Requires-Python >=3.5,<3.9; 1.24.0.post1 Requires-Python >=3.5,<3.9; 1.24.0.post2 Requires-Python >=3.5,<3.9; 1.25.0 Requires-Python >=3.5,<3.9; 1.25.0.post1 Requires-Python >=3.5,<3.9; 1.26.0 Requires-Python >=3.5,<3.9; 1.26.0.post1 Requires-Python >=3.5,<3.9; 1.27.0 Requires-Python >=3.5,<3.9; 1.27.0.post1 Requires-Python >=3.5,<3.9; 1.28.0 Requires-Python >=3.5,<3.9; 1.28.0.post1 Requires-Python >=3.5,<3.9; 1.29.0 Requires-Python >=3.6,<3.9; 1.29.0.post1 Requires-Python >=3.6,<3.9; 1.3.0 Requires-Python >=3.5,<3.9; 1.3.0.post1 Requires-Python >=3.5,<3.9; 1.3.0.post2 Requires-Python >=3.5,<3.9; 1.30.0 Requires-Python >=3.6,<3.9; 1.31.0 Requires-Python >=3.6,<3.9; 1.32.0 Requires-Python >=3.6,<3.9; 1.33.0 Requires-Python >=3.6,<3.9; 1.33.0.post1 Requires-Python >=3.6,<3.9; 1.33.1 Requires-Python >=3.6,<3.9; 1.34.0 Requires-Python >=3.6,<3.9; 1.34.0.post1 Requires-Python >=3.6,<3.9; 1.34.1 Requires-Python >=3.6,<3.9; 1.35.0 Requires-Python >=3.6,<3.9; 1.35.1 Requires-Python >=3.6,<3.9; 1.36.0 Requires-Python >=3.6,<3.9; 1.36.1 Requires-Python >=3.6,<3.9; 1.37.0 Requires-Python >=3.6,<3.9; 1.38.0 Requires-Python >=3.6,<3.9; 1.38.0.post2 Requires-Python >=3.6,<3.9; 1.38.0.post3 Requires-Python >=3.6,<3.9; 1.38.1 Requires-Python >=3.6,<3.9; 1.39.0 Requires-Python >=3.6,<3.9; 1.39.1 Requires-Python >=3.6,<3.9; 1.4.0 Requires-Python >=3.5,<3.9; 1.4.0.post1 Requires-Python >=3.5,<3.9; 1.4.0.post2 Requires-Python >=3.5,<3.9; 1.40.0 Requires-Python >=3.6,<3.9; 1.41.0 Requires-Python >=3.6,<3.9; 1.41.1 Requires-Python >=3.6,<3.9; 1.41.1.post1 Requires-Python >=3.6,<3.9; 1.42.0 Requires-Python >=3.6,<3.9; 1.42.0.post1 Requires-Python >=3.6,<3.9; 1.43.0 Requires-Python >=3.6,<3.9; 1.43.0.post1 Requires-Python >=3.6,<3.9; 1.43.0.post2 Requires-Python >=3.6,<3.9; 1.44.0 Requires-Python >=3.6,<3.9; 1.45.0 Requires-Python >=3.6,<3.10; 1.46.0 Requires-Python >=3.6,<3.10; 1.46.0.post1 Requires-Python >=3.6,<3.10; 1.46.1 Requires-Python >=3.6,<3.10; 1.46.1.post1 Requires-Python >=3.6,<3.10; 1.47.0 Requires-Python >=3.6,<3.10; 1.47.0.post1 Requires-Python >=3.6,<3.10; 1.48.0 Requires-Python >=3.7,<3.10; 1.5.0 Requires-Python >=3.5,<3.9; 1.5.0.post1 Requires-Python >=3.5,<3.9; 1.5.0.post2 Requires-Python >=3.5,<3.9; 1.5.0.post3 Requires-Python >=3.5,<3.9; 1.5.0.post4 Requires-Python >=3.5,<3.9; 1.6.0 Requires-Python >=3.5,<3.9; 1.6.0.post1 Requires-Python >=3.5,<3.9; 1.7.0 Requires-Python >=3.5,<3.9; 1.8.0 Requires-Python >=3.5,<3.9; 1.8.0.post1 Requires-Python >=3.5,<3.9; 1.9.0 Requires-Python >=3.5,<3.9; 1.9.0.post1 Requires-Python >=3.5,<3.9; 3.0.0 Requires-Python >=3.11; 3.1.0 Requires-Python >=3.11; 3.1.1 Requires-Python >=3.11; 3.2.0 Requires-Python >=3.11; 3.2.1 Requires-Python >=3.11; 3.3.0 Requires-Python >=3.11; 3.3.1 Requires-Python >=3.11
2025-06-27T10:32:52: #10 80.63 ERROR: Could not find a version that satisfies the requirement msrc-azureml-runner==0.5.5 (from versions: none)
2025-06-27T10:32:52: #10 80.63 ERROR: No matching distribution found for msrc-azureml-runner==0.5.5
```
**Expected behavior**
Build completes correctly, with packages downloaded from private ADO artifact store, never the public pypi server.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
The bug was introduced in a change to this line of code in the SDK:
``` diff
azureml/core/conda_dependencies.py:179
-cd.set_pip_option("--find-links {}".format(pip_indexurl if pip_indexurl else _sdk_origin_url))
+cd.set_pip_option("--index-url {}".format(pip_indexurl if pip_indexurl else _sdk_origin_url))
```
When I make the change above, my image builds start working again.
Contributor guide
Assessment
This issue has not been assessed yet.