如何阻止pip安装conda已安装的Python包?
问题描述
我在测试个人Python包,使用Anaconda环境,其中已安装所需依赖包:执行conda list | egrep "rdkit|numpy"返回结果如下:
numpy 1.19.2 py39h89c1606_0 numpy-base 1.19.2 py39h2ae0177_0 rdkit 2022.03.1b1.0 py39he30056e_1 rdkit/label/beta
我的setup.py中未指定版本的依赖项配置为:
install_requires=[ 'rdkit', 'numpy', ],
但执行pip install .时,pip仍会安装另一版本的rdkit,日志如下:
Collecting rdkit Using cached rdkit-2022.3.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.9 MB)
需求为:若包已安装(无论版本),让pip保留原包且不执行任何操作。
解决方法
方法1:安装时添加--no-deps参数
直接在安装命令中加入--no-deps,让pip完全跳过依赖的检查与安装:
pip install . --no-deps
这个方式简单直接,适合已经确认环境内所有依赖都已安装的场景。
方法2:修改setup.py的依赖版本约束
在install_requires中给依赖添加>=0的版本规则,这样pip会判定任何已安装的版本都满足要求,不会触发新的安装或更新:
install_requires=[ 'rdkit>=0', 'numpy>=0', ],
pip的版本解析逻辑中,>=0会匹配所有有效版本,不会再去拉取新包。
方法3:针对conda环境使用环境标记(进阶)
如果需要仅在conda环境下跳过依赖处理,可以通过环境标记判断当前环境是否为conda环境(检查CONDA_PREFIX环境变量):
install_requires=[ 'rdkit; os.environ.get("CONDA_PREFIX") is not None', 'numpy; os.environ.get("CONDA_PREFIX") is not None', ],
此方法适合需要区分不同运行环境的场景,一般推荐优先使用前两种更简洁的方案。
内容的提问来源于stack exchange,提问作者Sergey Sosnin
相关产品推荐
相关产品推荐

