Skip to content

Fix accidental creation of js/ directory under site-packages/ when installing Plotly#5586

Closed
emilykl wants to merge 4 commits intomainfrom
fix-5584
Closed

Fix accidental creation of js/ directory under site-packages/ when installing Plotly#5586
emilykl wants to merge 4 commits intomainfrom
fix-5584

Conversation

@emilykl
Copy link
Copy Markdown
Contributor

@emilykl emilykl commented Apr 30, 2026

Link to issue

Closes #5584

Description of change

Fixes issue since Plotly 6.7.0, introduced by #5540, where pip install plotly would unintentionally create a js/ directory under site-packages/, interfering with any other package which might use the js/ name.

Demo

N/A

Testing strategy

To reproduce the issue:

  1. Create a fresh Python virtual environment
  2. Run pip install plotly==6.7.0 (or uv pip install ...)
  3. Notice that the following directory exists: $VENV_ROOT/lib/pythonX.Y/site-packages/js

To verify that this PR fixes the issue:

  1. Check out this branch
  2. Run python -m build from the root folder, and make sure it runs without error
  • Verify that new dist/plotly-6.7.0.tar.gz and dist/plotly-6.7.0-py3-none-any.whl files are created
  1. Create a fresh Python virtual environment
  2. Run pip install dist/plotly-6.7.0-py3-none-any.whl
  3. Verify that $VENV_ROOT/lib/pythonX.Y/site-packages/js DOES NOT exist
  4. Verify that $VENV_ROOT/share/jupyter/labextensions/jupyterlab-plotly/install.json DOES exist
  5. To test installing the tar file, repeat steps 4-7 replacing the .whl file path with the .tar.gz file path

Guidelines

KRRT7 and others added 4 commits April 16, 2026 08:12
Three changes to the hot path hit by every fig.show(), write_html(),
to_json(), and write_image() call:

1. to_typed_array_spec: replace copy_to_readonly_numpy_array (which
   copies the array, wraps through narwhals, and sets readonly flag)
   with a lightweight np.asarray — the input is already a deepcopy
   from to_dict(), so copying again is pure waste.

2. convert_to_base64: replace is_homogeneous_array (which checks
   numpy, pandas, narwhals, and __array_interface__) with a direct
   isinstance(value, np.ndarray) check. In the to_dict() context,
   data is already validated and stored as numpy arrays.

3. is_skipped_key: replace list scan with frozenset lookup (O(1)).

Profile results (10 traces × 100K points, 20 calls):
  to_typed_array_spec: 1811ms → 1097ms (40% faster)
  copy_to_readonly_numpy_array: 226ms → 0ms (eliminated)
  narwhals from_native: 68ms → 0ms (eliminated)
  is_skipped_key: 41ms → ~0ms (eliminated)
In convert_to_base64, when iterating list/tuple elements, only recurse
into dicts, lists, and tuples. Strings and numbers can never contain
numpy arrays, so recursing into them wastes ~500K function calls on
figures with large text arrays.
@emilykl
Copy link
Copy Markdown
Contributor Author

emilykl commented Apr 30, 2026

Whoops, there are unrelated commits on this branch. Closing in favor of #5587.

@emilykl emilykl closed this Apr 30, 2026
@emilykl emilykl deleted the fix-5584 branch May 1, 2026 19:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG]: plotly is installing js top-level package with data files

2 participants