Skip to content

chore: move the Python SDKs to a single root uv workspace - #1775

Draft
devin-ai-integration[bot] wants to merge 1 commit into
mainfrom
devin/1787828318-uv-workspace
Draft

chore: move the Python SDKs to a single root uv workspace#1775
devin-ai-integration[bot] wants to merge 1 commit into
mainfrom
devin/1787828318-uv-workspace

Conversation

@devin-ai-integration

Copy link
Copy Markdown
Contributor

Summary

The three Python packages had three separate uv.locks and two nested workspaces that each claimed ../python-sdk as a member — so e2b's transitive dependency set was resolved independently (and could drift) per consumer, and packages/code-interpreter-python was effectively the workspace root of the SDK it depends on. This makes the repo root the single uv workspace root:

# /pyproject.toml (virtual root, no [project])
[tool.uv.workspace]
members = ["packages/python-sdk", "packages/code-interpreter-python", "packages/desktop-python"]

[tool.uv.sources]
e2b = { workspace = true }   # inherited by members, replaces the per-package copies

One uv.lock and one .venv at the root; the per-package locks and [tool.uv.workspace]/[tool.uv.sources] blocks are gone. The stub package.jsons stay, since changesets still versions and releases these packages alongside the JS ones.

Because the fan-out commands (pnpm run lint/typecheck/test) hop between members of one shared venv, every uv invocation is now --all-packages, which keeps the environment stable instead of re-syncing per package:

-"lint": "uv run make lint"
+"lint": "uv run --all-packages make lint"

CI mirrors that: uv sync --locked --all-packages (lint/typecheck no longer sync only packages/python-sdk, which would not have covered the other two).

The one non-obvious consequence: inside a workspace uv build defaults to the workspace root's dist/, which would have pooled all three SDKs in one directory and left uv publish's default dist/* glob (relative to the package dir) matching nothing. Every release/artifact build therefore passes --out-dir dist explicitly:

-"postPublish": "uv build && uv publish --token ${PYPI_TOKEN} ..."
+"postPublish": "uv build --out-dir dist && uv publish --token ${PYPI_TOKEN} ..."

Path filters gained pyproject.toml / uv.lock at the root (previously each package's lock was covered by its own packages/** glob), and .vscode points at the root interpreter.

No package sources or dependency versions change: the lock resolves the same 86 packages, and pnpm run lint, pnpm run format, pnpm run typecheck and uv build pass for all three packages. No changeset — build tooling only, no public surface change.

Link to Devin session: https://app.devin.ai/sessions/818374226bae45bc9852dbee886cac92
Open in Devin Desktop: https://app.devin.ai/desktop/session/818374226bae45bc9852dbee886cac92?variant=devin
Requested by: @mishushakov

Co-Authored-By: mish@e2b.dev <mish@e2b.dev>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@cla-bot cla-bot Bot added the cla-signed label Aug 27, 2026
@changeset-bot

changeset-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: ffa9b0e

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@github-actions

Copy link
Copy Markdown
Contributor

Package Artifacts

Built from 8aecc87. Download artifacts from this workflow run.

JS SDK (e2b@2.46.1-devin-1787828318-uv-workspace.0):

npm install ./e2b-2.46.1-devin-1787828318-uv-workspace.0.tgz

CLI (@e2b/cli@2.18.1-devin-1787828318-uv-workspace.0):

npm install ./e2b-cli-2.18.1-devin-1787828318-uv-workspace.0.tgz

Code Interpreter JS SDK (@e2b/code-interpreter@2.7.2-devin-1787828318-uv-workspace.0):

npm install ./e2b-code-interpreter-2.7.2-devin-1787828318-uv-workspace.0.tgz

Desktop JS SDK (@e2b/desktop@2.3.3-devin-1787828318-uv-workspace.0):

npm install ./e2b-desktop-2.3.3-devin-1787828318-uv-workspace.0.tgz

Python SDK (e2b==2.46.0+devin.1787828318.uv.workspace):

pip install ./e2b-2.46.0+devin.1787828318.uv.workspace-py3-none-any.whl

Code Interpreter Python SDK (e2b-code-interpreter==2.9.1+devin.1787828318.uv.workspace):

pip install ./e2b_code_interpreter-2.9.1+devin.1787828318.uv.workspace-py3-none-any.whl

Desktop Python SDK (e2b-desktop==2.4.3+devin.1787828318.uv.workspace):

pip install ./e2b_desktop-2.4.3+devin.1787828318.uv.workspace-py3-none-any.whl

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked T-1–T-74 across parity, API shape/naming/typing, streaming/lifecycle, configuration, errors, and docs: 0 violations; this PR changes only Python workspace/build/CI configuration and does not alter the public SDK surface.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant