如何在pip命令行中指定自定义PyPI源并强制信任主机(无需配置文件或虚拟环境)
如何在pip命令行中指定自定义PyPI源并强制信任主机(无需配置文件或虚拟环境)
看起来你遇到的问题是因为ArcGIS自带的Python环境里的pip版本比较老——--trusted-host这个参数是在pip 1.5之后才引入的,旧版本pip根本不认识它。不用折腾配置文件或者虚拟环境,咱们直接在命令行里解决这个问题,分两种情况给你方案:
方案1:先升级当前环境的pip(推荐)
既然要在用户环境里操作,咱们先把pip升级到支持--trusted-host的版本,用--user参数安装到用户目录,不需要管理员权限。
先执行升级pip的命令(用sys.executable确保调用的是ArcGIS环境的pip,而不是系统其他的Python):
import subprocess import sys # 假设你的全局配置从这里引入 from your_settings_module import PYPI # 先升级pip try: subprocess.check_call( [ sys.executable, "-m", "pip", "install", "--user", "--trusted-host", PYPI["trusted_host"], "-i", PYPI["pypi_url"], "--upgrade", "pip" ], text=True ) except subprocess.CalledProcessError as e: print(f"升级pip失败:{e}")
升级完成后,你原来的安装命令就可以正常运行了,因为此时pip已经支持--trusted-host参数。
方案2:兼容旧版本pip(如果无法升级)
如果因为ArcGIS环境限制不能升级pip,那可以用旧版本pip支持的--allow-external和--allow-unverified参数来绕过安全检查(注意:只在你完全信任这个自定义PyPI源的情况下使用)。
修改后的安装命令如下:
import subprocess import sys from your_settings_module import PYPI try: resp = subprocess.check_call( [ sys.executable, "-m", "pip", "install", "--user", "--allow-external", package_name, "--allow-unverified", package_name, "-i", PYPI["pypi_url"], package_name ], text=True ) except subprocess.CalledProcessError as e: print(f"安装包失败:{e}")
如果你的自定义源里的所有包都需要信任,也可以用通配符*来简化:
[ sys.executable, "-m", "pip", "install", "--user", "--allow-external", "*", "--allow-unverified", "*", "-i", PYPI["pypi_url"], package_name ]
额外注意事项
- 始终用
sys.executable来调用pip:这样能确保你用的是当前ArcGIS环境的Python对应的pip,不会和系统里其他Python环境混淆。 --user参数:把包安装到用户个人目录,不需要管理员权限,完美适配终端用户的使用场景,不会影响系统级的Python环境。
备注:内容来源于stack exchange,提问作者auslander




