在Ubuntu系统上配置Python网络开发环境,看似简单,实则暗藏不少难点。许多开发者,尤其是刚开始接触Linux的朋友,常常在此处受阻——要么Python版本不匹配,要么依赖库冲突不断。今天,我们将一步步梳理整个配置流程,从基础环境到网络编程测试,助你高效搭建起一个稳定、安全的Python网络工作环境。先来看看基础环境准备。
一、基础环境准备
1. 安装Python与pip
Ubuntu一般会预装Python 3。如何确认版本是否满足需求?很简单,运行python3 --version即可显示版本号。建议使用Python 3.6及以上版本,否则后续某些库可能因兼容性问题而报错。若未安装或版本过旧,执行以下命令即可完成安装:

sudo apt update
sudo apt install python3 python3-pip
pip作为Python的包管理利器,在安装Python 3时通常会自动附带python3-pip。安装完毕后,可通过pip3 --version快速验证是否生效。
2. 配置虚拟环境(强烈推荐)
当项目数量增多时,依赖冲突便成了常见痛点。例如,一个项目需要requests 2.x,而另一个要求requests 3.x,若全部安装到系统全局中,必然引发混乱。解决方案是使用venv创建虚拟环境,将每个项目的依赖隔离起来:
# 创建虚拟环境(例如命名为myenv)
python3 -m venv myenv
# 激活虚拟环境
source myenv/bin/activate
# 用完退出
deactivate
虚拟环境激活后,所有通过pip install安装的库均限于当前环境内,不会影响系统全局。初看似乎繁琐,但养成这一习惯后,你会发现项目维护变得格外清爽。
二、安装常用Python网络库
不同的网络任务需要选用不同的库,以下是几款最常用的网络库:
基础HTTP请求:
requests库。若只需发送GET或POST请求,用它最为便捷:pip3 install requests异步HTTP请求:
aiohttp库。处理大量并发连接时,异步IO的优势非常显著:pip3 install aiohttpSSH连接:
paramiko库。需要远程操控服务器?该库完美实现了SSH2协议:pip3 install paramiko底层网络通信:
socket库为Python内置,无需额外安装。TCP/UDP的底层操作均可借助它完成。
三、网络配置与安全设置
1. 配置防火墙(UFW)
Ubuntu的防火墙管理工具ufw,其全称"Uncomplicated Firewall"名副其实,使用起来并不复杂。常见的端口开放操作如下:
# 允许SSH(22端口,远程登录)
sudo ufw allow 22/tcp
# 允许HTTP(80端口,网页服务)
sudo ufw allow 80/tcp
# 允许HTTPS(443端口,加密网页服务)
sudo ufw allow 443/tcp
# 启用防火墙
sudo ufw enable
# 查看状态
sudo ufw status
有一点需要特别留意:生产环境中开放端口务必谨慎,切勿为贪图便利将22、80、443全部放开而不设限制。基本原则是"只开放必要端口,其他一律关闭"。
2. 配置网络接口(静态IP/自定义设置)
如需设置静态IP或修改网络参数,Ubuntu采用Netplan进行管理。配置文件通常位于/etc/netplan/目录下,文件名类似01-netcfg.yaml。示例如下:
network:
version: 2
renderer: networkd
ethernets:
ens33: # 网卡名称,通过ip a查看
dhcp4: no # 关闭DHCP后设置静态IP
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
保存后应用配置:
sudo netplan apply
一个小建议:修改配置前,先备份原文件,cp /etc/netplan/01-netcfg.yaml ~/01-netcfg.yaml.bak,一旦改错还能方便恢复。
四、编写与测试网络程序
1. 基础HTTP请求示例(使用requests库)
新建test_requests.py文件,写入以下内容:
import requests
try:
# 发送GET请求
response = requests.get('https://www.example.com', timeout=5)
response.raise_for_status()
print(f"Status Code: {response.status_code}")
print(f"Response Content: {response.text[:200]}...")
except requests.exceptions.HTTPError as errh:
print(f"HTTP Error: {errh}")
except requests.exceptions.ConnectionError as errc:
print(f"Connection Error: {errc}")
except requests.exceptions.Timeout as errt:
print(f"Timeout Error: {errt}")
except requests.exceptions.RequestException as err:
print(f"Other Error: {err}")
运行:
python3 test_requests.py
若网络正常,你将看到HTTP状态码以及网页前200个字符的内容。这就是一个基础网络请求测试的完整流程。
2. 基础Socket编程示例(TCP服务器/客户端)
Socket编程虽然历史久远,但仍是底层网络通信的核心。下面演示一个最简单的TCP回显服务器和客户端。
服务器端(server.py):
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
server_socket.bind(('127.0.0.1', 8080))
server_socket.listen(128)
print("Server is listening on 127.0.0.1:8080")
while True:
client_socket, client_address = server_socket.accept()
print(f"Connected by {client_address}")
try:
data = client_socket.recv(1024)
if not data:
break
print(f"Received: {data.decode()}")
client_socket.sendall(b"Hello from server!")
finally:
client_socket.close()
客户端(client.py):
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 8080))
try:
client_socket.sendall(b"Hello from client!")
data = client_socket.recv(1024)
print(f"Received from server: {data.decode()}")
finally:
client_socket.close()
测试流程:
- 终端1运行
python3 server.py - 终端2运行
python3 client.py - 客户端将显示服务器回显的 "Hello from server!",服务器端则可看到客户端发来的内容。
五、常见问题排查
库安装失败:有些库(如
paramiko)依赖系统底层库。若报错提示缺少.h文件或链接库,通常需要先安装系统依赖:sudo apt install libssl-dev libffi-dev python3-dev。端口冲突:启动服务器时若遇到"Address already in use",说明端口已被占用。使用
sudo lsof -i :8080查看占用进程,或更换端口尝试。防火墙拦截:如果外部无法访问你的服务,请检查防火墙是否放行了对应端口。例如,执行
sudo ufw allow 8080/tcp开放端口。
以上就是Ubuntu上配置Python网络环境的完整指南。从环境搭建、网络库安装,到防火墙配置和实际编程测试,基本覆盖了日常开发中的核心环节。如果你在实际操作中遇到其他问题,欢迎在评论区留言讨论。
