温馨提示×

如何配置Ubuntu上的Python网络库

小樊
41
2025-10-31 08:55:38
栏目: 编程语言

一、基础环境准备

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. 配置虚拟环境(可选但推荐)

为避免项目间依赖冲突,建议使用venv创建虚拟环境:

# 创建虚拟环境(如命名为myenv)
python3 -m venv myenv
# 激活虚拟环境
source myenv/bin/activate
# 停用虚拟环境(使用时输入deactivate)

激活后,所有通过pip install安装的库将仅存在于当前虚拟环境中。

二、安装常用Python网络库

根据需求选择合适的网络库,以下是常见库的安装方法:

  • 基础HTTP请求requests库(同步请求,简单易用)
    pip3 install requests
    
  • 异步HTTP请求aiohttp库(支持异步IO,高性能)
    pip3 install aiohttp
    
  • SSH连接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

注意:生产环境中需根据实际需求调整端口开放策略,避免过度暴露。

2. 配置网络接口(静态IP/自定义设置)

若需设置静态IP或修改网络参数,编辑Netplan配置文件(通常位于/etc/netplan/目录,如01-netcfg.yaml):

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:  # 网卡名称(通过ip a查看)
      dhcp4: no  # 关闭DHCP(静态IP需设置为no)
      addresses:
        - 192.168.1.100/24  # 静态IP地址及子网掩码
      gateway4: 192.168.1.1  # 网关地址
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]  # DNS服务器

保存后应用配置:

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()  # 检查状态码(非200则抛出异常)
    print(f"Status Code: {response.status_code}")
    print(f"Response Content: {response.text[:200]}...")  # 打印前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状态码及网页片段内容。

2. 基础Socket编程示例(TCP服务器/客户端)

  • 服务器端(server.py)
    import socket
    
    # 创建TCP套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置端口复用(避免TIME_WAIT状态导致无法重启)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 绑定地址与端口
    server_socket.bind(('127.0.0.1', 8080))
    # 开始监听(最多128个连接)
    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:
            # 接收数据(最多1024字节)
            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
    
    # 创建TCP套接字
    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等依赖系统库的包时出现错误,需先安装系统依赖(如sudo apt install libssl-dev libffi-dev python3-dev)。
  • 端口冲突:若启动服务器时报“Address already in use”,说明端口已被占用,可通过sudo lsof -i :8080查看占用进程,或更换端口。
  • 防火墙拦截:若无法从外部访问服务,需检查防火墙是否允许对应端口(如sudo ufw allow 8080/tcp)。

0