跨平台Python开发需统一路径拼接、显式指定文件编码、动态判断系统执行命令、声明平台约束的第三方依赖:用pathlib.Path或os.path.join()处理路径;所有open()必须带encoding='utf-8';用platform.system()区分命令;依赖项用环境标记限定平台。
硬写 'data/config.json' 或 'logserror.log' 在 Linux/macOS 上会直接报 FileNotFoundError,因为反斜杠 在非 Windows 系统里是转义字符,且路径分隔符不匹配。
正确做法是统一用 pathlib.Path(推荐)或 os.path.join():
from pathlib import Path;config_path = Path('data') / 'config.json'
import os;log_path = os.path.join('logs', 'error.log')
str(Path(...)) 后再手动拼接,否则又退回到字符串风险Windows 默认用 cp1252 或 gbk,Linux/macOS 默认是 utf-8。不指定编码时,同一段代码在不同系统上可能读出乱码、抛 UnicodeDecodeError,甚至静默损坏数据。
所有 open() 调用都应带上 encoding='utf-8':
立即学习“Python免费学习笔记(深入)”;
with open('data.csv', encoding='utf-8') as f:json.load(f, encoding='utf-8') 不合法 —— json.load() 本身不接受 encoding,要先用 open(..., encoding='utf-8') 打开文件句柄再传入encoding='utf-8',并注意 newline='' 参数防止 Windows 多出
像清屏、启动服务、调用 curl 或 grep 这类操作,不能直接写死命令名。例如 os.system('clear') 在 Windows 上失败,os.system('cls') 在 Linux 上报错。
用 platform.system() 判断更可靠(比 os.name 更明确):
import platformif platform.system() == 'Windows': cmd = ['cmd', '/c', 'echo', 'hello']else: cmd = ['sh', '-c', 'echo hello']subprocess.run(cmd, ...) 替代 os.system(),便于捕获输出和错误有些库只支持特定系统,比如 uvloop 不支持 Windows,colorama 在 Linux/macOS 上多余但无害。硬装会导致 pip 安装失败或运行时报 ModuleNotFoundError。
在 pyproject.toml 或 setup.py 中用环境标记(environment markers)控制:
"uvloop>=0.15.1; sys_platform != 'win32'""colorama>=0.4.6; sys_platform == 'win32'"try/except ImportError 来兜底 —— 安装阶段就该失败,而不是运行时才暴露Path)来堵死,而不是靠测试覆盖。