很多人装完系统第一件事就是开终端敲 python 或 node,顺手 import 一堆模块——结果某天发现脚本在另一台机器上死活跑不起来,报错说 No module named 'xxx'。其实不是代码错了,是标准库的‘默认’和‘实际’常有出入。
别把第三方当标准库
比如 Python 里想用 requests 发个 HTTP 请求,顺手写 import requests,一运行就报错。它压根不是 Python 标准库,得自己 pip install requests。类似还有 numpy、pandas、click,看着常用,实则全靠手动装。Windows 上自带的 Python 安装包(尤其是微软应用商店版)甚至可能连 venv 都没默认启用,得自己开命令行加参数激活。
版本差异真能卡住你
Python 3.8 加了 graphlib 模块,3.9 新增 zoneinfo,但公司服务器还跑着 3.7?那俩模块直接 ImportError。Node.js 也一样:fs.promises 在 v14 才稳定,v12 里得靠 util.promisify(fs.readFile) 曲线救国。写脚本前瞄一眼目标环境的版本,比 debug 半小时强。
跨平台路径处理,别硬拼字符串
写 os.path.join('data', 'config.json') 看似稳妥,但有人偏爱 'data/config.json'。Linux/macOS 下能跑,Windows 上可能因反斜杠问题读不到文件。更隐蔽的是 pathlib.Path('data') / 'config.json' 这种写法,既清晰又自动适配分隔符,标准库早就有,不用自己造轮子。
编码问题不是玄学
读个本地 CSV 文件,中文全变乱码?别急着换库。先看 open() 默认编码:Python 3 在 Windows 上常是 cp1252,Linux/macOS 是 utf-8。显式写成 open('data.csv', encoding='utf-8'),省得半夜被报警电话叫醒。
别忽略时区这个隐形炸弹
datetime.datetime.now() 返回的是本地时间,但服务器时区可能是 UTC,本地开发机却是 CST。日志打出来的时间对不上,定时任务错过窗口,都是这儿埋的雷。真要可靠,统一用 datetime.datetime.now(tz=timezone.utc),或者老老实实用 time.time() 记时间戳。
小提醒:标准库 ≠ 全能库
像 Python 的 email 模块解析带附件的邮件,API 又绕又容易漏字段;Node 的 querystring 对嵌套对象支持弱。这种时候别硬刚,该上 email-validator 就上,该换 qs 就换。标准库重在稳和通用,不是为每种业务场景优化的。
import sys
print(f"Python 版本:{sys.version}")
print(f"平台:{sys.platform}")执行这三行,比翻文档快得多——环境信息才是你真正该盯住的第一行代码。