当前位置:首页>python>Python 脚本在你电脑能跑,同事电脑就不行?

Python 脚本在你电脑能跑,同事电脑就不行?

  • 2026-10-11 07:41:31
Python 脚本在你电脑能跑,同事电脑就不行?
经常听见吐槽,把一个爬虫脚本发给同事,信誓旦旦说直接跑就行。

结果同事那边报 ModuleNotFoundError,自己这边跑得好好的。

几轮改下来,他的环境从 Python 3.8 升到 3.10,pip 装了一堆库,最后发现是路径里有个中文文件夹……

下面复盘一下整个过程。


到底发生了什么?

脚本在本地跑得飞快,发给同事,他那边一跑:

Traceback (most recent call last):  File "analyze.py", line 3, in <module>    import pandas as pdModuleNotFoundError: No module named 'pandas'

"你没装 pandas 啊,pip install pandas 就行。"

装完再跑:

Traceback (most recent call last):  File "analyze.py", line 1, in <module>    from config import API_KEYModuleNotFoundError: No module named 'config'

"我本地有个 config.py 存 API Key……"

折腾了半小时,他的环境终于能跑了,但他看你的眼神已经变了。


为什么炸了?

这个问题太经典了,几乎每个把脚本分享给别人的人都踩过。

根因就四个:

① Python 版本不一样

你用 Python 3.10,同事可能还在用 3.8。

3.10 的 match-case 语法、3.9 的 dict | dict 合并操作,在 3.8 上全是语法错误。

# 你在 3.10 能跑match status:    case "ok":        print("正常")    case _:        print("异常")# 同事 3.8 跑到这里直接 SyntaxError
② 库没装 / 版本不一样

你装了 pandas 2.0,同事装的是 pandas 1.3。

API 不兼容,同样的代码行为完全不同。

# pandas 2.0+ 支持df.merge(other, on="id", how="left")# pandas 1.3 没问题,但某些新参数会报 TypeError

更常见的是压根没装,你的环境里一堆库是之前项目装的,你以为人人都有。

③ 路径是绝对路径
# 你的电脑DATA_PATH = "/Users/ningning/Documents/data/sales.csv"# 同事的电脑# 这个路径根本不存在

Windows 和 Mac 的路径分隔符还不一样,/ vs \,又是一层坑。

④ 环境变量 / 配置文件

你本地有 .env 文件存着 API Key,同事没有。

你系统里设了 PYTHONPATH,同事没设。

你觉得理所当然的东西,对别人来说全是隐形依赖。


怎么修?

方法一:用 requirements.txt 锁依赖
pip freeze > requirements.txt

发代码时把这个文件一起发过去,同事一键安装:

pip install -r requirements.txt

但 pip freeze 会导出你环境里所有库,包括很多跟项目无关的。

更干净的做法是手动写:

# requirements.txt(手动写,只列项目需要的)pandas>=2.0requests>=2.28openpyxl>=3.0
方法二:用虚拟环境隔离

别污染系统 Python,每个项目新建一个虚拟环境:

# 创建python -m venv .venv# 激活(Mac/Linux)source .venv/bin/activate# 激活(Windows).venv\Scripts\activate# 装依赖pip install -r requirements.txt

同事拿到你的代码,创建虚拟环境、装依赖,环境跟你一模一样。

方法三:路径别写死
# ❌ 绝对路径DATA_PATH = "/Users/ningning/data/sales.csv"# ✅ 相对路径import osDATA_PATH = os.path.join(os.path.dirname(__file__), "data", "sales.csv")# ✅ 或者用 pathlib(更现代)from pathlib import PathDATA_PATH = Path(__file__).parent / "data" / "sales.csv"
方法四:配置外部化

把 API Key、路径等配置从代码里拿出来:

# ❌ 硬编码API_KEY = "sk-xxxxx"# ✅ 从环境变量读import osAPI_KEY = os.environ.get("API_KEY")if not API_KEY:    raise ValueError("请设置环境变量 API_KEY")# ✅ 或者用 .env 文件 + python-dotenvfrom dotenv import load_dotenvload_dotenv()API_KEY = os.environ.get("API_KEY")
方法五:写个 README 说明环境要求

哪怕就三行也行:

## 环境要求- Python 3.9+- pip install -r requirements.txt- 设置环境变量 API_KEY=你的key

防坑清单

分享代码前过一遍:

检查项怎么查
Python 版本兼容?python --version,确认最低支持版本
依赖列清楚了?有没有 requirements.txt
路径是相对的?搜代码里的 /Users、C:\、/home
配置外部化了?搜代码里的硬编码字符串(Key、密码、路径)
有 README?至少写环境要求和运行步骤

一句话总结:你的代码能在你电脑跑,不代表能在任何电脑跑。分享前想一想,换个人拿到这份代码,能不能 3 分钟内跑起来?


写代码的人最容易忽略环境差异,因为你对自己的环境太熟悉了。

评论区聊聊:你把代码发给别人,最离谱的报错是什么?

下期预告:99% 的 Python 新手都分不清的两件事,== vs is / 深拷贝 vs 浅拷贝


我是鲁叶的Python,10年互联网古法程序员。
Python/ML/DL/大模型都折腾过,坑也踩了不少。
关注我,持续输出实用干货。

最新文章

随机文章