-
Notifications
You must be signed in to change notification settings - Fork 149
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Current Behavior
When trying to make plots in a jupyter
python
notebook with plotly, only explorting the plot to html
work.
Given the following config:
{pkgs, ...}: {
kernel.python.plotly = {
enable = true;
displayName = "Plotly Graph Tester";
extraPackages = ps:
with ps; [
numpy
scipy
plotly
pandas
odfpy
nbformat
chart-studio
ipywidgets
];
};
}
The following example plot
import plotly.express as px
import plotly.io as pio
pio.renderers.default = "jupyterlab"
df = px.data.gapminder()
fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
size="pop", color="continent", hover_name="country",
log_x=True, size_max=55, range_x=[100,100000], range_y=[25,90])
fig.show()
fails with (browser console output):
Traceback (most recent call last):
File "/nix/store/i2ihlpzkbcysdyq8srhh3xlpmv6cskgy-python3-3.10.9-env/lib/python3.10/site-packages/tornado/web.py", line 1711, in _execute
result = method(*self.path_args, **self.path_kwargs)
File "/nix/store/i2ihlpzkbcysdyq8srhh3xlpmv6cskgy-python3-3.10.9-env/lib/python3.10/site-packages/tornado/web.py", line 3208, in wrapper
return method(self, *args, **kwargs)
File "/nix/store/i2ihlpzkbcysdyq8srhh3xlpmv6cskgy-python3-3.10.9-env/lib/python3.10/site-packages/jupyter_server/auth/decorator.py", line 63, in inner
return method(self, *args, **kwargs)
File "/nix/store/i2ihlpzkbcysdyq8srhh3xlpmv6cskgy-python3-3.10.9-env/lib/python3.10/site-packages/jupyter_server/services/config/handlers.py", line 40, in patch
section = self.config_manager.update(section_name, new_data)
File "/nix/store/i2ihlpzkbcysdyq8srhh3xlpmv6cskgy-python3-3.10.9-env/lib/python3.10/site-packages/jupyter_server/services/config/manager.py", line 38, in update
return self.write_config_manager.update(section_name, new_data)
File "/nix/store/i2ihlpzkbcysdyq8srhh3xlpmv6cskgy-python3-3.10.9-env/lib/python3.10/site-packages/jupyter_server/config_manager.py", line 129, in update
self.set(section_name, data)
File "/nix/store/i2ihlpzkbcysdyq8srhh3xlpmv6cskgy-python3-3.10.9-env/lib/python3.10/site-packages/jupyter_server/config_manager.py", line 108, in set
self.ensure_config_dir_exists()
File "/nix/store/i2ihlpzkbcysdyq8srhh3xlpmv6cskgy-python3-3.10.9-env/lib/python3.10/site-packages/jupyter_server/config_manager.py", line 62, in ensure_config_dir_exists
os.makedirs(self.config_dir, 0o755)
File "/nix/store/abax98471z8fshv4b9p46bkh3lxmpy0z-python3-3.10.9/lib/python3.10/os.py", line 225, in makedirs
mkdir(name, mode)
OSError: [Errno 30] Read-only file system: '/nix/store/ka67xr3wflf6r3x26mplrzc665y1lix4-jupyter-dir/config/serverconfig'
The only way to actually get a plot I can see is to do:
import plotly.express as px
import plotly.io as pio
import plotly.offline as po
df = px.data.gapminder()
fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
size="pop", color="continent", hover_name="country",
log_x=True, size_max=55, range_x=[100,100000], range_y=[25,90])
po.plot(fig, filename='/home/jeroen/devel/playgnd/jupyenv/plotly/test3.html')
and open the html in a browser.
Expected Behavior
Using
pio.renderers.default = "jupyterlab"
renders the plot in the notebook.
Steps To Reproduce
Run flake with above kernel config.
OS
- system: `"x86_64-linux"`
- host os: `Linux 6.10.9-zen1, NixOS, 24.11 (Vicuna), 24.11.20241009.5633bcf`
- multi-user?: `yes`
- sandbox: `yes`
- version: `nix-env (Lix, like Nix) 2.91.0
System type: x86_64-linux
Additional system types: aarch64-linux, i686-linux
Features: gc, signed-caches
System configuration file: /etc/nix/nix.conf
### Version
master
### Additional Context
This seems to be a broader issue with any packages expecting to write to the python environment.
Probably the "correct" way to solve this is to be able to provide a "normal" (i.e. non-nix-store) state-directory that extensions should write to.
### Relevant log output
_No response_
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working