Python 3 中 “python -m SimpleHTTPServer” 的等效命令

Python 3 中 “python -m SimpleHTTPServer” 的等效命令

技术背景

在 Python 2 中,SimpleHTTPServer 模块可以通过 python -m SimpleHTTPServer 命令方便地启动一个简单的 HTTP 服务器。但在 Python 3.0 中,SimpleHTTPServer 模块被合并到了 http.server 模块中。

实现步骤

基本等效命令

在 Python 3 中,等效的命令是 python -m http.server,根据 Python 的安装情况,也可以使用 python3 -m http.server

使用 2to3 工具

2to3 工具可以在将 Python 2 代码转换为 Python 3 代码时自动调整导入语句。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ 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

2to3 也可以接受标准输入,无需创建文件,示例如下:

1
$ 2to3 - <<< "import SimpleHTTPServer"

绑定特定接口

如果想绑定到特定的接口而不是所有接口,可以使用 -b--bind 标志,例如:

1
python -m http.server 8000 --bind 127.0.0.1

上述命令中,8000 是端口号,127.0.0.1 是要绑定的 IP 地址。

指定端口和目录

默认情况下,服务器在 8000 端口启动,也可以显式指定端口号:

1
python -m http.server 9000

从 Python 3.7 开始,可以使用 -d--directory 选项指定服务器要服务的目录:

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

兼容 Python 2 和 3 的脚本

如果需要在一个项目中同时兼容 Python 2 和 3 进行测试,可以使用以下脚本:

1
python -m $(python -c 'import sys; print("http.server" if sys.version_info[:2] > (2,7) else "SimpleHTTPServer")')

也可以将其设置为别名:

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

核心代码

1
2
3
4
5
6
7
8
# 启动默认端口的 HTTP 服务器
python -m http.server

# 指定端口和绑定 IP
python -m http.server 8000 --bind 127.0.0.1

# 指定服务目录
python -m http.server --directory /tmp/

最佳实践

  • 在开发和测试环境中使用 http.server 可以快速搭建一个简单的 HTTP 服务器。
  • 对于生产环境,由于 http.server 只实现了基本的安全检查,不建议使用,应考虑使用更专业的 Web 服务器,如 Nginx、Apache 等。

常见问题

端口被占用

如果指定的端口已经被其他程序占用,服务器将无法启动。可以尝试更换端口号。

兼容性问题

在使用 2to3 工具时,可能会遇到一些隐式修复器跳过的情况,但通常不影响主要的导入语句转换。


Python 3 中 “python -m SimpleHTTPServer” 的等效命令
https://119291.xyz/posts/python3-equivalent-of-simplehttpserver/
作者
ww
发布于
2025年5月29日
许可协议