安装器 API
安装器 API 提供了 pip 自动安装和管理功能,确保 pip 在系统中正确安装和配置。
核心接口
Installer
pip 安装器接口。
go
type Installer interface {
// 检查和安装
IsInstalled() (bool, error)
Install() error
Uninstall() error
// 版本管理
GetVersion() (string, error)
GetLatestVersion() (string, error)
Upgrade() error
// 配置管理
Configure(config *InstallerConfig) error
GetConfig() *InstallerConfig
// 状态查询
GetStatus() (*InstallerStatus, error)
Validate() error
}
创建安装器
NewInstaller
创建新的 pip 安装器。
go
func NewInstaller() Installer
返回值:
Installer
- 安装器实例
示例:
go
installer := pip.NewInstaller()
// 检查 pip 是否已安装
installed, err := installer.IsInstalled()
if err != nil {
log.Fatalf("检查 pip 安装状态失败: %v", err)
}
if !installed {
fmt.Println("Pip 未安装,正在安装...")
if err := installer.Install(); err != nil {
log.Fatalf("安装 pip 失败: %v", err)
}
fmt.Println("✅ Pip 安装成功")
}
NewInstallerWithConfig
使用配置创建安装器。
go
func NewInstallerWithConfig(config *InstallerConfig) Installer
参数:
config
- 安装器配置
返回值:
Installer
- 安装器实例
示例:
go
config := &pip.InstallerConfig{
PythonPath: "/usr/bin/python3",
InstallMethod: pip.InstallMethodGetPip,
ForceReinstall: false,
UserInstall: false,
}
installer := pip.NewInstallerWithConfig(config)
安装方法
Install
安装 pip。
go
func (i *Installer) Install() error
返回值:
error
- 错误信息
示例:
go
if err := installer.Install(); err != nil {
log.Fatalf("安装 pip 失败: %v", err)
}
fmt.Println("Pip 安装成功")
InstallWithMethod
使用指定方法安装 pip。
go
func (i *Installer) InstallWithMethod(method InstallMethod) error
参数:
method
- 安装方法
返回值:
error
- 错误信息
示例:
go
// 使用 get-pip.py 安装
if err := installer.InstallWithMethod(pip.InstallMethodGetPip); err != nil {
log.Fatalf("使用 get-pip.py 安装失败: %v", err)
}
// 使用包管理器安装
if err := installer.InstallWithMethod(pip.InstallMethodPackageManager); err != nil {
log.Fatalf("使用包管理器安装失败: %v", err)
}
Uninstall
卸载 pip。
go
func (i *Installer) Uninstall() error
返回值:
error
- 错误信息
示例:
go
if err := installer.Uninstall(); err != nil {
log.Fatalf("卸载 pip 失败: %v", err)
}
fmt.Println("Pip 卸载成功")
版本管理
GetVersion
获取当前安装的 pip 版本。
go
func (i *Installer) GetVersion() (string, error)
返回值:
string
- pip 版本号error
- 错误信息
示例:
go
version, err := installer.GetVersion()
if err != nil {
log.Fatalf("获取 pip 版本失败: %v", err)
}
fmt.Printf("当前 pip 版本: %s\n", version)
GetLatestVersion
获取最新的 pip 版本。
go
func (i *Installer) GetLatestVersion() (string, error)
返回值:
string
- 最新版本号error
- 错误信息
示例:
go
latest, err := installer.GetLatestVersion()
if err != nil {
log.Fatalf("获取最新版本失败: %v", err)
}
fmt.Printf("最新 pip 版本: %s\n", latest)
Upgrade
升级 pip 到最新版本。
go
func (i *Installer) Upgrade() error
返回值:
error
- 错误信息
示例:
go
current, _ := installer.GetVersion()
latest, _ := installer.GetLatestVersion()
if current != latest {
fmt.Printf("升级 pip 从 %s 到 %s...\n", current, latest)
if err := installer.Upgrade(); err != nil {
log.Fatalf("升级 pip 失败: %v", err)
}
fmt.Println("✅ Pip 升级成功")
}
配置管理
InstallerConfig
安装器配置结构。
go
type InstallerConfig struct {
// Python 配置
PythonPath string // Python 可执行文件路径
// 安装配置
InstallMethod InstallMethod // 安装方法
ForceReinstall bool // 强制重新安装
UserInstall bool // 用户级安装
// 网络配置
IndexURL string // 包索引 URL
TrustedHosts []string // 受信任的主机
Timeout time.Duration // 网络超时
Retries int // 重试次数
// 代理配置
ProxyURL string // 代理 URL
// 临时目录
TempDir string // 临时目录路径
// 日志配置
Verbose bool // 详细输出
Quiet bool // 静默模式
LogFile string // 日志文件
}
InstallMethod
安装方法枚举。
go
type InstallMethod int
const (
InstallMethodAuto InstallMethod = iota // 自动选择
InstallMethodGetPip // 使用 get-pip.py
InstallMethodPackageManager // 使用系统包管理器
InstallMethodEnsurepip // 使用 ensurepip 模块
InstallMethodBootstrap // 使用 bootstrap 脚本
)
Configure
配置安装器。
go
func (i *Installer) Configure(config *InstallerConfig) error
参数:
config
- 安装器配置
返回值:
error
- 错误信息
示例:
go
config := &pip.InstallerConfig{
PythonPath: "/usr/bin/python3",
InstallMethod: pip.InstallMethodGetPip,
UserInstall: true,
IndexURL: "https://pypi.tuna.tsinghua.edu.cn/simple/",
TrustedHosts: []string{"pypi.tuna.tsinghua.edu.cn"},
Timeout: 120 * time.Second,
Retries: 5,
}
if err := installer.Configure(config); err != nil {
log.Fatalf("配置安装器失败: %v", err)
}
状态查询
InstallerStatus
安装器状态信息。
go
type InstallerStatus struct {
IsInstalled bool // 是否已安装
Version string // 当前版本
LatestVersion string // 最新版本
InstallPath string // 安装路径
PythonVersion string // Python 版本
InstallMethod string // 安装方法
LastChecked time.Time // 最后检查时间
NeedsUpgrade bool // 是否需要升级
}
GetStatus
获取安装器状态。
go
func (i *Installer) GetStatus() (*InstallerStatus, error)
返回值:
*InstallerStatus
- 状态信息error
- 错误信息
示例:
go
status, err := installer.GetStatus()
if err != nil {
log.Fatalf("获取状态失败: %v", err)
}
fmt.Printf("Pip 状态:\n")
fmt.Printf(" 已安装: %t\n", status.IsInstalled)
fmt.Printf(" 当前版本: %s\n", status.Version)
fmt.Printf(" 最新版本: %s\n", status.LatestVersion)
fmt.Printf(" 安装路径: %s\n", status.InstallPath)
fmt.Printf(" 需要升级: %t\n", status.NeedsUpgrade)
Validate
验证 pip 安装。
go
func (i *Installer) Validate() error
返回值:
error
- 验证错误
示例:
go
if err := installer.Validate(); err != nil {
fmt.Printf("Pip 安装验证失败: %v\n", err)
// 尝试修复
if err := installer.Install(); err != nil {
log.Fatalf("修复安装失败: %v", err)
}
} else {
fmt.Println("✅ Pip 安装验证通过")
}
高级功能
DownloadGetPip
下载 get-pip.py 脚本。
go
func (i *Installer) DownloadGetPip(destPath string) error
参数:
destPath
- 下载目标路径
返回值:
error
- 错误信息
示例:
go
if err := installer.DownloadGetPip("./get-pip.py"); err != nil {
log.Fatalf("下载 get-pip.py 失败: %v", err)
}
InstallFromScript
从脚本安装 pip。
go
func (i *Installer) InstallFromScript(scriptPath string) error
参数:
scriptPath
- 脚本路径
返回值:
error
- 错误信息
示例:
go
if err := installer.InstallFromScript("./get-pip.py"); err != nil {
log.Fatalf("从脚本安装失败: %v", err)
}
CheckDependencies
检查 pip 依赖。
go
func (i *Installer) CheckDependencies() ([]*Dependency, error)
返回值:
[]*Dependency
- 依赖列表error
- 错误信息
示例:
go
deps, err := installer.CheckDependencies()
if err != nil {
log.Fatalf("检查依赖失败: %v", err)
}
fmt.Println("Pip 依赖:")
for _, dep := range deps {
fmt.Printf("- %s %s (%s)\n", dep.Name, dep.Version, dep.Status)
}
平台特定功能
检测操作系统
go
func DetectOS() OSType
func GetPackageManager() PackageManager
示例:
go
osType := pip.DetectOS()
switch osType {
case pip.OSTypeLinux:
fmt.Println("Linux 系统")
case pip.OSTypeMacOS:
fmt.Println("macOS 系统")
case pip.OSTypeWindows:
fmt.Println("Windows 系统")
}
pkgMgr := pip.GetPackageManager()
fmt.Printf("包管理器: %s\n", pkgMgr)
系统包管理器安装
go
func (i *Installer) InstallWithPackageManager() error
示例:
go
// 在 Ubuntu/Debian 上使用 apt 安装
// 在 CentOS/RHEL 上使用 yum/dnf 安装
// 在 macOS 上使用 brew 安装
if err := installer.InstallWithPackageManager(); err != nil {
log.Fatalf("使用包管理器安装失败: %v", err)
}
错误处理
安装器特定错误
go
const (
ErrorTypePipAlreadyInstalled ErrorType = "pip_already_installed"
ErrorTypePipNotInstalled ErrorType = "pip_not_installed"
ErrorTypeUnsupportedPlatform ErrorType = "unsupported_platform"
ErrorTypeDownloadFailed ErrorType = "download_failed"
ErrorTypeInstallationFailed ErrorType = "installation_failed"
)
示例:
go
if err := installer.Install(); err != nil {
switch pip.GetErrorType(err) {
case pip.ErrorTypePipAlreadyInstalled:
fmt.Println("Pip 已经安装")
case pip.ErrorTypeUnsupportedPlatform:
fmt.Println("不支持的平台")
case pip.ErrorTypeDownloadFailed:
fmt.Println("下载失败,请检查网络连接")
case pip.ErrorTypeInstallationFailed:
fmt.Println("安装失败,请检查权限")
default:
fmt.Printf("未知错误: %v\n", err)
}
}
实用工具
环境检查
go
func CheckPythonEnvironment() (*PythonEnvironment, error)
示例:
go
env, err := pip.CheckPythonEnvironment()
if err != nil {
log.Fatalf("检查 Python 环境失败: %v", err)
}
fmt.Printf("Python 环境:\n")
fmt.Printf(" 版本: %s\n", env.Version)
fmt.Printf(" 路径: %s\n", env.Path)
fmt.Printf(" 架构: %s\n", env.Architecture)
fmt.Printf(" 支持 pip: %t\n", env.SupportsPip)
清理工具
go
func (i *Installer) Cleanup() error
示例:
go
// 清理临时文件和缓存
if err := installer.Cleanup(); err != nil {
log.Printf("清理失败: %v", err)
}
最佳实践
- 检查后安装:总是先检查 pip 是否已安装
- 选择合适的安装方法:根据环境选择最适合的安装方法
- 处理权限问题:考虑使用用户级安装避免权限问题
- 网络配置:在网络受限环境中配置代理和镜像源
- 验证安装:安装后验证 pip 是否正常工作