Repository: plotly/plotly.py
Pull request: Add back in express extra dependencies and required dependencies
Fixes #5041 - @LiamConnors I haven't tested this through the CI artifacts yet but locally these changes are working for me!

Edit: tested the CI artifact and it's also working. Also, check out what it looks like in test.pypi.org! https://test.pypi.org/project/plotly/

Problem statement:
Release builds in CI not installing dependencies and not recognising [express] extra
If you download and install a release build from CI, it no longer picks up that there is an `express` extra:

```
Processing .../plotly-6.0.0-py3-none-any.whl (from plotly==6.0.0)
WARNING: plotly 6.0.0 does not provide the extra 'express'
````

Additionally, required dependencies like `narwhals` are not installed. 

@marthacryan

Hints from issue discussion:
This is a result of #4970. It just requires a couple lines in the pyproject.toml, so this is a quick fix! One thing I'm noticing as I look into this though is the file [`requires-optional.txt`](https://github.com/plotly/plotly.py/blob/main/requires-optional.txt) - I think this is meant to be used as `pip install plotly[optional]` - is that documented anywhere? And do we want to keep supporting it? 
@marthacryan As far as I can tell, `requires-optional` is intended to be a list of ALL dependencies used by any subpackage of Plotly.py, _plus_ packages needed for setting up a local dev workflow. It's referenced in `CONTRIBUTING.md` dev setup instructions.

Probably it should be cleaned up and renamed to `requires-dev.txt`, maybe even exposed as a `plotly[dev]` extra. We discussed doing both of those things in https://github.com/plotly/plotly.py/pull/4644 , but in the interest of getting the PR out sooner we never went ahead with it..

Commit message: Remove deleted files from MANIFEST.in

Patch to review:
diff --git a/MANIFEST.in b/MANIFEST.in
index d9c32908b0b..d079cf5bf8d 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,5 +1,3 @@
 include LICENSE.txt
 include README.md
-include requires-install.txt
-include requires-express.txt
 include plotly/package_data/widgetbundle.js
diff --git a/pyproject.toml b/pyproject.toml
index 699e20ceb14..78a3ec57799 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -38,9 +38,14 @@ classifiers = [
 requires-python = ">=3.8"
 license = {file="LICENSE.txt"}
 version = "6.0.0"
-dynamic = ["dependencies"]
+dependencies = [
+    "narwhals>=1.13.3",
+    "packaging"
+]
+
+[project.optional-dependencies]
+express = ["numpy"]
 
-# TODO: check that this works
 [tool.setuptools.packages.find]
 where = ["."]
 include = ["plotly*", "_plotly*"]
diff --git a/requires-express.txt b/requires-express.txt
deleted file mode 100644
index f5611973473..00000000000
--- a/requires-express.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-### Required dependencies for Plotly Express    ###
-###                                             ###
-### To install, run:                            ###
-###      $ pip install -r requires-express.txt  ###
-###                                             ###
-###################################################
-
-numpy
diff --git a/requires-install.txt b/requires-install.txt
deleted file mode 100644
index 2923ec9d8ab..00000000000
--- a/requires-install.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-### Dependencies for Core Plotly Functionality  ###
-###                                             ###
-### To install, run:                            ###
-###      $ pip install -r requires-install.txt  ###
-###                                             ###
-###################################################
-
-## dataframe agnostic layer ##
-narwhals>=1.15.1
-packaging


Code review comments:
diff_hunk: @@ -38,9 +38,14 @@ classifiers = [
 requires-python = ">=3.8"
 license = {file="LICENSE.txt"}
 version = "6.0.0"
-dynamic = ["dependencies"]
+dependencies = [
+    "narwhals>=1.13.3",
path: pyproject.toml
text: @user1:
```suggestion
    "narwhals>=1.15.1",
```

diff_hunk: @@ -38,9 +38,14 @@ classifiers = [
 requires-python = ">=3.8"
 license = {file="LICENSE.txt"}
 version = "6.0.0"
-dynamic = ["dependencies"]
+dependencies = [
+    "narwhals>=1.13.3",
path: pyproject.toml
text: @user1:
@author bump to `1.15.1`