项目一换电脑就跑不起来?Python 虚拟环境和依赖清单的用法

举报
yd_272823509 发表于 2026/10/31 10:17:09 2026/10/31
【摘要】 每次换一台电脑,或者把项目发给同学一起调试,Python 项目最常见的翻车现场就是:代码明明一行没动,一跑就报 ModuleNotFoundError;好不容易把包装上,又因为库的版本对不上,冒出各种奇怪的兼容问题。其实解决办法并不复杂:给每个项目一个独立的虚拟环境,再留一份随时更新的依赖清单,就能少踩很多坑。 第一:虚拟环境是给项目的「隔间」,不是可有可无的形式Python 的包默认装在系...

每次换一台电脑,或者把项目发给同学一起调试,Python 项目最常见的翻车现场就是:代码明明一行没动,一跑就报 ModuleNotFoundError;好不容易把包装上,又因为库的版本对不上,冒出各种奇怪的兼容问题。其实解决办法并不复杂:给每个项目一个独立的虚拟环境,再留一份随时更新的依赖清单,就能少踩很多坑。

第一:虚拟环境是给项目的「隔间」,不是可有可无的形式

Python 的包默认装在系统环境里,项目一多,版本冲突迟早找上门:这个项目要老版本,那个项目要新版本,装谁都会打破另一个。虚拟环境的作用,是给每个项目开一个独立的隔间,包只装进项目自己的目录,彼此互不干扰。

创建和进入只需要两条命令:

python3 -m venv .venv
source .venv/bin/activate   # Windows 下用 .venv\Scripts\activate

激活成功后,命令行前面会出现 (.venv) 标记,之后 pip install 装的包都只进这个环境,退出用 deactivate。两个提醒:一是 .venv 目录不要提交到 Git,它动不动就几百兆,而且和操作系统强相关,提交了也用不了;二是编辑器里记得把解释器切到 .venv 里的那个,在哪个环境装包,就用哪个环境的解释器运行,不要一半一半混着来。

第二:依赖清单要在「装完包」的那一刻顺手更新

环境建好只是第一步。项目真正能搬走的,是这份清单:

pip freeze > requirements.txt

它会把当前环境里的包连同精确版本号全部列出来。换一台机器时,只需要:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

环境就能原样复现出来。关键的习惯是:每装一个新包、每升级一次版本,就顺手重新生成一次清单,并且和代码一起提交进 Git。几个月之后,当你在一台新机器上三条命令把项目跑起来时,会感谢当初多敲了那一行命令的自己。

第三:两个最常见的坑

坑一:pip 明明装了,python 却说找不到。 多半是 pip 和 python 不属于同一个环境,包装到了别处。用 python -m pip install 包名 代替单独敲 pip install,能保证包装到当前解释器名下,这一个小习惯就能消掉一大半「装了却没有」的灵异事件。再用 which python 和 python -c “import sys; print(sys.executable)” 确认一下解释器路径,心里就彻底有数了。

坑二:清单里混进了一堆无关的包。 pip freeze 会列出环境里的全部包,包括你随手试装、后来又忘掉的东西。清单越干净,复现越可靠。拿不准某个包要不要留时,可以先在新环境里按清单装好、把主要功能跑一遍,缺什么再补什么,比留着一堆来历不明的包更稳妥。

小结

  • 每个项目一个 .venv,环境目录不进 Git。
  • 装包用 python -m pip,装完立刻更新 requirements.txt 并提交。
  • 换机器时三步复现:建环境、激活、按清单安装。

环境问题最磨人的地方在于,它和代码逻辑毫无关系,却能把一下午耗光。把虚拟环境和依赖清单变成固定动作,项目就能从「在我电脑上能跑」,变成实实在在的「在哪都能跑」。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。