上个月开始一个新项目,我直接装了Python 3.13,心想用最新版总没错。
结果第一周就撞墙:某个关键库报错"不支持Python 3.13",issue里一堆人反馈,作者回复"等正式版再说"。
我被迫降级到3.12,然后又遇到第二个坑:虚拟环境管理混乱,依赖冲突。第三个坑更离谱:同一份代码,同事跑不起来。
这篇文章记录我踩的三个坑,以及背后的原因和解决方案。如果你正要开新项目,这篇文章能帮你省很多麻烦。
坑一:Python版本太新,库不支持
遇到什么问题
项目需要一个叫some-cryptic-lib的库(化名,真实情况类似)。我执行:
pip install some-cryptic-lib
报错:
ERROR: Package 'some-cryptic-lib' requires a different Python: 3.13.0 not in '>=3.8,<3.13'
去GitHub看issue,有人2025年6月就反馈了,作者回复:"Python 3.13的free-threading改动太大,我们要测试完才支持。"
等了一个月,还是不行。
为什么会这样
Python 3.13改动很大:
- Free-threading(自由线程):去掉了GIL,但很多C扩展库依赖GIL保证线程安全,需要重写
- C API变更
- 实验性功能
这些改动对库作者来说是负担,不是每个库都有精力第一时间适配。
怎么避免
经验法则:新项目选最新版本的上一个版本。
2026年4月,最新版是3.13,稳定版选3.12。
更保守一点:选3.11。3.11是公认最稳定的版本之一,几乎所有库都支持。
具体判断方法:
pip index versions some-cryptic-lib
如果requires Python >=3.8,<3.13,说明不支持3.13。
我的解决方案
降级到Python 3.12:
brew install python@3.12pyenv install 3.12.9pyenv global 3.12.9
坑二:虚拟环境管理混乱,依赖冲突
遇到什么问题
项目A用requests==2.28.0,项目B用requests==2.31.0。
我一开始直接在全局环境装包,结果:
pip install requests==2.28.0 # 项目Apip install requests==2.31.0 # 项目B,覆盖了A的版本
项目A跑不起来,报错API不兼容。
为什么会这样
Python的包是装在"site-packages"目录下的,全局共享。不同项目如果依赖不同版本的包,就会冲突。
这不是Python的问题,是使用方式的问题。
怎么避免:必须用虚拟环境
方法一:venv(Python自带,最轻量)
python -m venv myenvmyenv\Scripts\activatesource myenv/bin/activatepip install requests==2.28.0deactivate
每个项目一个虚拟环境,互不干扰。
方法二:Conda(适合数据科学项目)
conda create -n myproject python=3.12conda activate myprojectconda install requestsconda deactivate
Conda的优势是可以装非Python依赖(如CUDA),适合机器学习项目。
我的解决方案
项目结构改为:
project_a/├── venv/├── requirements.txt└── src/project_b/├── venv/├── requirements.txt└── src/
每个项目独立虚拟环境,依赖写在requirements.txt:
requests==2.28.0pandas==2.0.0numpy==1.24.0
一键安装:
pip install -r requirements.txt
坑三:同一份代码,同事跑不起来
遇到什么问题
我代码写好了,推到Git。同事拉下来,装依赖,报错:
ModuleNotFoundError: No module named 'some_package'
但我的机器上明明没问题。
为什么会这样
三个原因:
- 依赖没写全
- 版本不锁定:同事
pip install时装了最新版,和我用的版本不一样 - Python版本不同
怎么避免
第一步:正确生成requirements.txt
pip freeze > requirements.txt
这会记录所有包和精确版本:
requests==2.28.0urllib3==1.26.18certifi==2023.7.22...
第二步:锁定Python版本
项目根目录创建.python-version文件:
3.12.9
如果用pyenv,会自动读取这个文件。
第三步:明确依赖范围
只用核心依赖,不要把开发工具写进requirements.txt:
requests==2.28.0pandas==2.0.0pytest==7.4.0black==23.7.0mypy==1.5.0
我的解决方案
项目结构:
myproject/├── .python-version # 锁定Python版本├── requirements.txt # 生产依赖├── requirements-dev.txt # 开发依赖├── venv/└── src/
同事拿到项目后:
pyenv installpython -m venv venvsource venv/bin/activate # Windows: venv\Scripts\activatepip install -r requirements.txtpython src/main.py
总结:新项目Python版本选择清单
我把这些坑总结成一个检查清单:
第一步:选Python版本
- 2026年推荐:3.12(稳定)或3.11(更保守)
- 检查关键库是否支持:
pip index versions 库名
第二步:创建虚拟环境
python -m venv venvsource venv/bin/activate # Windows: venv\Scripts\activate
第三步:记录依赖
pip freeze > requirements.txt
第四步:锁定版本
第五步:团队协作
#!/bin/bashpython -m venv venvsource venv/bin/activatepip install -r requirements.txt
一个建议:pyenv管理多版本Python
如果你像我一样,要在多个项目间切换,不同项目用不同Python版本,强烈建议装pyenv。
curl https://pyenv.run | bashpyenv install 3.11.9pyenv install 3.12.9cd project_apyenv local 3.11.9 # 自动创建.python-version文件cd project_bpyenv local 3.12.9
每次进入项目目录,Python版本自动切换,不用手动改。
Windows用户可以用pyenv-win,原理一样。
最后说一句
新项目第一天,花10分钟把环境搭好,比后面踩一星期坑划算得多。
Python版本选稳定版,虚拟环境必须用,依赖一定要记录。
这三件事做到位,后面会顺很多。
别像我一样,新项目第一天就撞墙。