pdm-installed streamlit fails to launch a server

796 views Asked by At

I have installed streamlit on my Mac with pdm and launched the command streamlit hello to view the demos. The command returns the following:

❯ pdm run streamlit hello
2022-03-21 11:43:45.812 WARNING streamlit.config:
Warning: the config option 'server.enableCORS=false' is not compatible with 'server.enableXsrfProtection=true'.
As a result, 'server.enableCORS' is being overridden to 'true'.

More information:
In order to protect against CSRF attacks, we send a cookie with each request.
To do so, we must specify allowable origins, which places a restriction on
cross-origin resource sharing.

If cross origin resource sharing is required, please disable server.enableXsrfProtection.

2022-03-21 11:43:45.816 DEBUG   streamlit.logger: Initialized tornado logs
2022-03-21 11:43:45.818 DEBUG   matplotlib.pyplot: Loaded backend agg version unknown.
2022-03-21 11:43:45.819 DEBUG   streamlit.bootstrap: Setting up signal handler
2022-03-21 11:43:45.819 DEBUG   asyncio: Using selector: KqueueSelector
2022-03-21 11:43:45.827 DEBUG   streamlit.server.server: Starting server...
2022-03-21 11:43:45.827 DEBUG   streamlit.server.server: Serving static content from the Node dev server
2022-03-21 11:43:45.830 DEBUG   streamlit.server.server: Server started on port 8501
2022-03-21 11:43:45.831 DEBUG   streamlit.server.server: Server state: State.INITIAL -> State.WAITING_FOR_FIRST_BROWSER
2022-03-21 11:43:46.029 DEBUG   git.cmd: Popen(['git', 'version'], cwd=<my/working/directory>, universal_newlines=False, shell=None, istream=None)
2022-03-21 11:43:46.041 DEBUG   git.cmd: Popen(['git', 'version'], cwd=<my/working/directory>, universal_newlines=False, shell=None, istream=None)
2022-03-21 11:43:46.054 DEBUG   git.cmd: Popen(['git', 'version'], cwd=<my/working/directory>, universal_newlines=False, shell=None, istream=None)
2022-03-21 11:43:46.066 DEBUG   git.cmd: Popen(['git', 'rev-parse', '--show-toplevel'], cwd=<my/working/directory>, universal_newlines=False, shell=None, istream=None)

  Welcome to Streamlit. Check out our demo in your browser.

  Local URL: http://localhost:3000
  Network URL: http://192.168.1.117:3000

  Ready to create your own Python apps super quickly?
  Head over to https://docs.streamlit.io

  May you create awesome apps!

However, when I connect to the local URL, the connection is rejected:

Safari Error Message: Rejected Connection

I tried switching to Brave Browser and Firefox, but I got the same error.

From other SO questions, I tried the following:

❯ apachectl configtest
AH00557: httpd: apr_sockaddr_info_get() failed for Lucas-MacBook-Air.local
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

I also ran this:

ps -ax | grep 'httpd'
  124 ??         0:00.85 /usr/sbin/httpd -D FOREGROUND
  517 ??         0:00.00 /usr/sbin/httpd -D FOREGROUND
 6627 ttys002    0:00.01 grep httpd

I tried launching other stuff that creates a local server, e.g. Jupyter Notebooks, and they work.

1

There are 1 answers

0
baggiponte On BEST ANSWER

The problem is known: streamlit does not support pdm at the time of writing, as mentioned by @cye18 on the parallel issue opened on pdm's github page.

The problem is that, while streamlit configs default to server port 8501, the server is launched on the port 3000. You can force this behaviour in two ways.

The first is by manually changing streamlit's settings, which lies in ~/.streamlit/config.toml or locally in your project directory.

[server]
serverPort = 8501

Alternatively, you can add the following flag to the streamlit command when launching it:

pdm run streamlit run app.py --server.port 8501

Either way, streamlit will complain by saying that server.port does not work when global.developmentMode is true. Once again, this can be solved by adding the flag --global.developmentMode false. The final command will look like this: pdm run streamlit run app.py --server.port 8501 --global.developmentMode false.

Alternatively, the local settings will look like the following:

[server]
port = 8501

[global]
developmentMode = false