- The ADK Python package is hosted on PyPI, which is inaccessible in an air-gapped environment.
- By default, watsonx Orchestrate pulls packages from PyPI when installing Python tools.
- All ADK components must be available in your internal registry, including
ibm-watsonx-orchestrate,ibm-watsonx-orchestrate-core,ibm-watsonx-orchestrate-clients, and all transitive dependencies for the target Python runtime version.
Python tool dependencies are installed server-side at deployment time, not during tool import. This means your internal registry must be accessible from watsonx Orchestrate when tools are deployed—specifically, the registry must be reachable from the Tools Runtime Manager and executor runtime inside the cluster, not only from the developer workstation. For comprehensive information on dependency management, see Python dependency management.
Prerequisites
As a site administrator, you need:- Access to a jumpbox that connects to both the internet and your Cloud Pak for Data cluster
- A locally hosted Python package registry accessible from your internal network (common PyPI registry providers include Artifactory and Sonatype Nexus)
Setting up a jumpbox and local registry
A jumpbox is a machine with access to both the public internet and your internal network. You use it to download packages from PyPI and upload them to your local registry, so watsonx Orchestrate can install them at tool deployment time without needing internet access. The general workflow is:- On the jumpbox (internet access), download all required packages as wheel files.
- Upload those wheel files to your local PyPI registry (for example, Artifactory or Nexus).
- Configure your tools to reference the local registry in
requirements.txt.
Uploading the ADK to your local PyPI registry
1
Get the dependencies list
On your jumpbox, run the following commands to get the full list of dependencies and generate wheel files for each ADK dependency:
2
Upload wheel files
Upload all generated wheel files from the For Nexus, use the REST upload API or the Nexus UI to publish each
dependencies directory to your local PyPI registry provider.For Artifactory, you can use twine:.whl file to your hosted PyPI repository.3
Verify packages are available
After uploading, confirm that the packages are reachable from your internal network before importing any tools. Run the following from a machine on the same network as watsonx Orchestrate:You should see the version you uploaded listed in the output. If no versions appear, check that the upload completed successfully and that the registry URL is correct.You can also verify a specific dependency the same way:
Activating the ADK in air-gapped environments
When activating your watsonx Orchestrate environment in an air-gapped setup, use the following flags to prevent external registry access:--registry skip: Prevents the ADK CLI from replacing or appending its default registry-based ADK dependency--skip-version-check: Avoids public PyPI version validation during activation
Configuring Python tool imports
To import Python tools successfully, configure watsonx Orchestrate to pull the ADK from your local registry. All Python tools must be imported with arequirements.txt file that contains at least the following:
Any dependencies other than the ADK that you want to use in your tools must also be uploaded to your PyPI registry by the site administrator. Remember that dependencies are installed server-side when tools are deployed, so your registry must remain accessible from watsonx Orchestrate.
Authenticating to a private registry
Some private registries require authentication. You can embed credentials directly in therequirements.txt index URL:
Best practices for air-gapped deployments
-
Pin all dependency versions to ensure reproducible builds. Always pin the ADK version and all application dependencies:
-
Use hash verification for maximum security:
- Lock your internal registry to prevent package changes between environments
- Validate your configuration by deploying a test Python tool in the target air-gapped cluster and confirming that package installation succeeds without external network access. This ensures all transitive dependencies are available in your internal registry.
Troubleshooting
Tool deployment fails with “package not found” or dependency errors
The tool runtime (TRM) installs packages at deployment time, not at import time. If deployment fails, the most likely cause is that one or more packages are missing from your local registry. To check which packages are missing:- Look at the error message in the tool deployment logs. The missing package name is usually included.
- On your jumpbox, confirm the package exists in your local registry:
- If the package is not found, download it and upload it to your registry following the same steps as the ADK upload above.
- A transitive dependency was added in a newer version of a package you rely on. Re-run
pip wheel -r requirements.txton your jumpbox with the updated requirements and re-upload. - The
requirements.txtin your tool uses--extra-index-urlbut also still references PyPI for some packages. Make sure all packages are present in your local registry.
Tool deployment fails even though packages appear to be in the registry
If packages are uploaded but deployment still fails, check the following:- Registry accessibility: Confirm the registry URL is reachable from the watsonx Orchestrate cluster, not just from the jumpbox. The tool runtime contacts the registry directly during deployment.
- TLS / SSL errors: If your registry uses a self-signed or enterprise CA certificate, the tool runtime may fail to validate it. Contact your cluster administrator to ensure the CA certificate is trusted by the watsonx Orchestrate runtime environment.
-
Registry URL format: Verify that the
--extra-index-urlvalue in yourrequirements.txtends with/simple/as required by PEP 503:
Authentication errors from a private registry (401 Unauthorized)
If your registry requires authentication and you see 401 Unauthorized errors during tool deployment:
- Confirm the credentials embedded in the
--extra-index-urlare correct and have not expired. - Check whether the registry returns authenticated download URLs. Some registries (such as certain GitLab configurations) return download URLs that do not include authentication tokens, causing the download step to fail even when the index lookup succeeds. In this case, configure the registry to preserve authentication in redirect URLs, or switch to Artifactory or Nexus which handle this correctly.
- If using a token in the URL, make sure the token has read access to the package repository.
Related resources
- For version compatibility information, see the On-premises compatibility
- For general environment setup, see Initiate environment

