跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Python怎么通过源代码安装第三方库_python setup.py install详解

不推荐用 setup.py install,因它绕过 pip 依赖解析、易致冲突与卸载失败;现代标准是 pip install -e . 或 python -m build 后 pip install。 setup.py install 为什么现在不推荐用了 它会绕过 pip 的依赖解析和版本管理,直接把包文件复制到 site-packages,容易导致依赖冲突、卸载困难、无法追踪来源。现代 Python 生态默认要求包提供
pyproject.toml
,
setup.py
已被标记为 legacy(即使存在,也常只是兼容性空壳)。 常见错误现象:
python setup.py install
成功但后续
import
失败;用
pip list
看不到该包;
pip uninstall
报 “not found”。 Python 3.12+ 默认禁用
setup.py
执行(需加
--legacy-setup-py
才能运行) 很多新项目根本没写
setup.py
,只保留
pyproject.toml
即使有
setup.py
,它可能只是调用
setuptools.build_meta
,实际构建逻辑在
pyproject.toml
里 想从源码装,应该用 pip install -e . 这是当前标准做法:在源码根目录(含
pyproject.toml
或
setup.py
)下运行,以“可编辑模式”安装——代码改完立刻生效,且能被
pip list
和
pip uninstall
正确识别。 使用场景:调试包源码、贡献 PR、本地修改后测试。 立即学习 “ Python免费学习笔记(深入) ”; 必须确保当前目录下有
pyproject.toml
(优先)或功能完整的
setup.py
执行前建议先升级
pip
:
pip install -U pip
,避免旧版 pip 对 PEP 517 构建支持不全 如果报错
subprocess.CalledProcessError
或
No module named 'setuptools'
,先
pip install setuptools wheel build
setup.py install 的几个典型坑 即使你坚持用它,也要清楚这些行为不是“安装”,而是“硬拷贝”: Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载
setup.py install
不读
requirements.txt
,不会自动装依赖(得手动
pip install -r requirements.txt
) 它默认走
easy_install
路径,生成
.egg-info
目录,而非标准的
-info
文件夹,导致工具链(如
pip show
、IDE 包索引)失效 多环境时容易误装到系统 Python 而非虚拟环境(检查
which python
和
python -m site
输出的
site-packages
路径) 若项目含 C 扩展(如
numpy
、
cryptography
),
setup.py install
很可能因缺失编译器/头文件而静默失败或降级为纯 Python 模式(性能暴跌) 真要离线装源码,优先走 wheel 流程 比直接跑
setup.py
更可靠:先构建分发包,再安装。这能复用标准构建流程,规避环境差异问题。 操作步骤(在源码根目录): 装构建工具:
pip install build
生成 wheel:
python -m build
(输出在
dist/
下,如
requests-2.31.0-py3-none-any.whl
) 离线安装:
pip install dist/xxx.whl
(支持依赖自动解析,且可卸载) 注意:
build
命令会读
pyproject.toml
中的
build-system
配置,比如指定
setuptools
或
poetry-core
,比硬调
setup.py
更健壮。 复杂点在于:有些老项目没有
pyproject.toml
,又没维护
setup.py
的构建逻辑——这时别强用
setup.py install
,先看 GitHub issues 有没有人提过构建问题,或者换用
pip install git+https://...
让 pip 自己处理。

相关文章