¿Cuál es el equivalente en Python 3 de "python -m SimpleHTTPServer"?

1439

¿Cuál es el equivalente de Python 3 python -m SimpleHTTPServer?

1
  • 1
    python -m http.server 8000, iniciará el servidor en el puerto 8000k.avinash 2 dic.20 a las 6:31
2055

De los documentos :

The SimpleHTTPServer module has been merged into http.server in Python 3.0. The 2to3 tool will automatically adapt imports when converting your sources to 3.0.

Entonces, su comando es python -m http.server, o dependiendo de su instalación, puede ser:

python3 -m http.server
17
  • 91
    En Python 3.3, el reemplazo de python -m CGIHTTPServeres python3 -m http.server --cgi. bseibold 21 feb 2013 a las 15:53
  • 22
    Claro, solo colóquelo al final de la línea de comando. Lea python3 -m http.server --helptodos los argumentos y opciones. Petr Viktorin 4 de junio de 2014 a las 18:51
  • 31
    python -m http.servertrabajó para mi. Tuve que quitar el3nu everest 9/07/2015 a las 20:59
  • 15
    @nueverest Depende de cómo se 'nombre' su instalación de Python. Por lo general, Python2 está disponible como pythony Python3 como, python3pero algunos prefieren instalar Python3 simplemente como python. Mast 14 de julio de 2015 a las 8:02
  • 5
    AFAIK, en Windows, se instalará como pythonpor defecto. Pero, la pregunta es para python3:)Petr Viktorin 14/07/2015 a las 20:10
309

El equivalente es:

python3 -m http.server
2
  • 62
    Y python3 -m http.server 8080si necesitas enlazar a un puerto. Lea más al final de la sección: docs.python.org/3/library/…AdamKalisz 22 de agosto de 2018 a las 8:36
  • 4
    De forma predeterminada, se vinculará al puerto 8000. Consulte python3 -m http.server --helppara obtener más detalles. stephenwade 20/03/19 a las 21:24
156

Utilizando la utilidad 2to3.

$ cat try.py
import SimpleHTTPServer

$ 2to3 try.py
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored try.py
--- try.py  (original)
+++ try.py  (refactored)
@@ -1 +1 @@
-import SimpleHTTPServer
+import http.server
RefactoringTool: Files that need to be modified:
RefactoringTool: try.py

Como muchas utilidades * nix, 2to3acepta stdinsi el argumento que se pasa es -. Por lo tanto, puede probar sin crear ningún archivo como este:

$ 2to3 - <<< "import SimpleHTTPServer"
0
108

Además de la respuesta de Petr, si desea vincularse a una interfaz específica en lugar de todas las interfaces, puede usar -bo --bindmarcar.

python -m http.server 8000 --bind 127.0.0.1

El fragmento anterior debería funcionar. 8000 es el número de puerto. 80 se utiliza como puerto estándar para comunicaciones HTTP.

2
  • python -m http.server 8081 --bind 127.0.0.1 Si su 8000 está siendo utilizado por otro programa. Haris Np 15 de mayo de 2019 a las 12:22
  • Si no se encuentra en un entorno virtual donde está ejecutando Python3, use python3 -m http.server 8081 --bind 127.0.0.1, de lo contrario obtendrá un error que / usr / bin / python: Ningún módulo llamado httpHaris Np 16 de mayo de 2019 a las 8:06
10

En uno de mis proyectos ejecuto pruebas contra Python 2 y 3. Para eso escribí un pequeño script que inicia un servidor local de forma independiente:

$ python -m $(python -c 'import sys; print("http.server" if sys.version_info[:2] > (2,7) else "SimpleHTTPServer")')
Serving HTTP on 0.0.0.0 port 8000 ...

Como alias:

$ alias serve="python -m $(python -c 'import sys; print("http.server" if sys.version_info[:2] > (2,7) else "SimpleHTTPServer")')"
$ serve
Serving HTTP on 0.0.0.0 port 8000 ...

Tenga en cuenta que controlo mi versión de Python a través de entornos conda , por eso puedo usar en pythonlugar de python3usar Python 3.

6

Como todo el mundo ha mencionado, el módulo http.server es equivalente a python -m SimpleHTTPServer.
Pero como advertencia de https://docs.python.org/3/library/http.server.html#module-http.server

Warning: http.server is not recommended for production. It only implements basic security checks.

Uso

http.server también se puede invocar directamente usando el -minterruptor del intérprete.

python -m http.server

El comando anterior ejecutará un servidor de forma predeterminada en el número de puerto 8000. También puede dar el número de puerto explícitamente mientras ejecuta el servidor

python -m http.server 9000

El comando anterior ejecutará un servidor HTTP en el puerto 9000 en lugar de 8000.

By default, server binds itself to all interfaces. The option -b/--bind specifies a specific address to which it should bind. Both IPv4 and IPv6 addresses are supported. For example, the following command causes the server to bind to localhost only:

python -m http.server 8000 --bind 127.0.0.1

o

python -m http.server 8000 -b 127.0.0.1

La versión de Python 3.8 también es compatible con IPv6 en el argumento de vinculación.

Enlace de directorio

De forma predeterminada, el servidor usa el directorio actual. La opción -d/--directoryespecifica un directorio al que debe servir los archivos. Por ejemplo, el siguiente comando usa un directorio específico:

python -m http.server --directory /tmp/

El enlace de directorio se introduce en Python 3.7