问题与目标
本地能运行的 Python 程序,换到服务器后常因系统、解释器、依赖或路径不同而失败。本篇建立最小 Linux 工作环境:登录 Ubuntu 服务器、确认系统信息、安装软件,并在隔离环境中运行脚本。
完成标准:能通过 SSH 登录服务器,解释命令提示符中的用户和目录,创建虚拟环境,并让一段 Python 代码在其中稳定运行。本篇不讨论容器和生产级服务器加固。
核心概念
Linux 服务器通常没有桌面,主要通过 Shell 接收命令。几个层次不要混在一起:
- Ubuntu 是操作系统发行版,APT 管理系统软件包。
- Shell 是命令解释器,Bash 是常见实现。
- SSH 是远程登录协议,默认端口通常是 22。
- Python 虚拟环境隔离项目依赖,不隔离操作系统。
user@host:~/project$ 表示当前用户、主机名、工作目录和普通用户身份。~ 是当前用户家目录,$ 通常表示普通用户,# 通常表示 root。
命令不必靠死记。外部命令通常支持 --help 和 man 命令名,Bash 内建命令可使用 help 命令名。先看帮助中的参数含义,再执行涉及安装、覆盖或删除的命令。
可运行实现
先在本机连接服务器:
ssh dev@192.0.2.10
登录后检查环境并建立示例项目:
cat /etc/os-release
uname -a
whoami
pwd
python3 --version
sudo apt update
sudo apt install -y python3-venv
mkdir -p ~/engineering-demo
cd ~/engineering-demo
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -c 'import sys; print(sys.executable); print("environment ready")'
最后两行应输出项目内 .venv/bin/python 的路径和 environment ready。退出虚拟环境使用:
deactivate
依赖安装尽量使用 python -m pip,这样可以确认 pip 属于当前 Python。项目依赖可记录为:
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
APT 管理的是系统级软件,常用操作可以按“查找—查看—安装—删除”理解:
apt search python3-venv
apt show python3-venv
sudo apt install python3-venv
sudo apt remove python3-venv
远程登录长期使用时可配置密钥。私钥只留在本机,服务器保存公钥:
ssh-keygen -t ed25519 -C 'dev-workstation'
ssh-copy-id dev@192.0.2.10
ssh -i ~/.ssh/id_ed25519 dev@192.0.2.10
传输单个项目文件可使用 scp requirements.txt dev@192.0.2.10:~/engineering-demo/。持续协作的源码更适合通过 Git 获取,生成数据和大文件则应使用专门存储,不要把 SSH 文件复制当作发布系统。
常见问题与排查
Connection refused:目标可达但 SSH 服务或端口未监听,先核对地址、端口和服务状态。Permission denied:检查用户名、密码或私钥权限;私钥一般不应允许其他用户读取。python: command not found:Ubuntu 常提供python3,激活虚拟环境后再使用python。- 安装包装到了错误环境:对比
which python、python -m pip --version。 - APT 找不到软件包:先检查
/etc/os-release、软件源和sudo apt update是否成功,不要随意添加来历不明的软件源。 - 密钥登录仍要求密码:使用
ssh -v查看实际尝试了哪把密钥,并检查服务器端~/.ssh与authorized_keys权限。 - 不要习惯性使用
sudo pip install,它会污染系统 Python,并可能破坏系统工具依赖。
小结
服务器环境的第一条排查链是:登录身份 → 当前目录 → Python 解释器 → 依赖位置。完成这条链,脚本才从“在某台电脑上能跑”迈向可复现运行。
License: CC BY-NC 4.0
Updated 3 hours ago
Was this article helpful? Give it a like.
0 comments


