虚拟环境 API
虚拟环境 API 提供了完整的 Python 虚拟环境管理功能,包括创建、激活、停用和删除虚拟环境。
核心方法
CreateVenv
创建新的虚拟环境。
go
func (m *Manager) CreateVenv(path string) error
参数:
path
- 虚拟环境路径
返回值:
error
- 错误信息
示例:
go
venvPath := "./my-env"
if err := manager.CreateVenv(venvPath); err != nil {
log.Fatalf("创建虚拟环境失败: %v", err)
}
fmt.Println("✅ 虚拟环境创建成功")
CreateVenvWithOptions
使用自定义选项创建虚拟环境。
go
func (m *Manager) CreateVenvWithOptions(path string, opts *VenvOptions) error
参数:
path
- 虚拟环境路径opts
- 虚拟环境选项
返回值:
error
- 错误信息
示例:
go
opts := &pip.VenvOptions{
PythonVersion: "3.9",
SystemSitePackages: false,
Prompt: "my-project",
UpgradePip: true,
InstallSetuptools: true,
InstallWheel: true,
}
if err := manager.CreateVenvWithOptions("./my-env", opts); err != nil {
log.Fatalf("创建虚拟环境失败: %v", err)
}
ActivateVenv
激活虚拟环境。
go
func (m *Manager) ActivateVenv(path string) error
参数:
path
- 虚拟环境路径
返回值:
error
- 错误信息
示例:
go
if err := manager.ActivateVenv("./my-env"); err != nil {
log.Fatalf("激活虚拟环境失败: %v", err)
}
fmt.Println("✅ 虚拟环境已激活")
DeactivateVenv
停用当前虚拟环境。
go
func (m *Manager) DeactivateVenv() error
返回值:
error
- 错误信息
示例:
go
if err := manager.DeactivateVenv(); err != nil {
log.Fatalf("停用虚拟环境失败: %v", err)
}
fmt.Println("✅ 虚拟环境已停用")
IsVenvActive
检查虚拟环境是否激活。
go
func (m *Manager) IsVenvActive() (bool, string)
返回值:
bool
- 是否激活string
- 虚拟环境路径
示例:
go
isActive, venvPath := manager.IsVenvActive()
if isActive {
fmt.Printf("当前虚拟环境: %s\n", venvPath)
} else {
fmt.Println("未在虚拟环境中")
}
RemoveVenv
删除虚拟环境。
go
func (m *Manager) RemoveVenv(path string) error
参数:
path
- 虚拟环境路径
返回值:
error
- 错误信息
示例:
go
if err := manager.RemoveVenv("./old-env"); err != nil {
log.Fatalf("删除虚拟环境失败: %v", err)
}
fmt.Println("✅ 虚拟环境已删除")
查询和管理
ListVenvs
列出指定目录下的所有虚拟环境。
go
func (m *Manager) ListVenvs(baseDir string) ([]*VenvInfo, error)
参数:
baseDir
- 基础目录
返回值:
[]*VenvInfo
- 虚拟环境信息列表error
- 错误信息
示例:
go
venvs, err := manager.ListVenvs("./envs")
if err != nil {
log.Fatalf("列出虚拟环境失败: %v", err)
}
fmt.Printf("找到 %d 个虚拟环境:\n", len(venvs))
for _, venv := range venvs {
fmt.Printf("- %s (Python %s)\n", venv.Name, venv.PythonVersion)
}
GetVenvInfo
获取虚拟环境详细信息。
go
func (m *Manager) GetVenvInfo(path string) (*VenvInfo, error)
参数:
path
- 虚拟环境路径
返回值:
*VenvInfo
- 虚拟环境信息error
- 错误信息
示例:
go
info, err := manager.GetVenvInfo("./my-env")
if err != nil {
log.Fatalf("获取虚拟环境信息失败: %v", err)
}
fmt.Printf("名称: %s\n", info.Name)
fmt.Printf("路径: %s\n", info.Path)
fmt.Printf("Python 版本: %s\n", info.PythonVersion)
fmt.Printf("创建时间: %s\n", info.CreatedAt.Format("2006-01-02 15:04:05"))
fmt.Printf("最后使用: %s\n", info.LastUsed.Format("2006-01-02 15:04:05"))
数据类型
VenvOptions
虚拟环境创建选项。
go
type VenvOptions struct {
PythonVersion string // Python 版本
SystemSitePackages bool // 是否访问系统包
Prompt string // 提示符名称
UpgradePip bool // 是否升级 pip
InstallSetuptools bool // 是否安装 setuptools
InstallWheel bool // 是否安装 wheel
Clear bool // 是否清理现有环境
Symlinks bool // 是否使用符号链接
Copies bool // 是否使用复制
WithoutPip bool // 是否不安装 pip
}
VenvInfo
虚拟环境信息。
go
type VenvInfo struct {
Name string // 环境名称
Path string // 环境路径
PythonVersion string // Python 版本
PipVersion string // Pip 版本
CreatedAt time.Time // 创建时间
LastUsed time.Time // 最后使用时间
Size int64 // 环境大小(字节)
PackageCount int // 已安装包数量
IsActive bool // 是否当前激活
HasRequirements bool // 是否有 requirements.txt
}
高级功能
CloneVenv
克隆虚拟环境。
go
func (m *Manager) CloneVenv(sourcePath, targetPath string) error
参数:
sourcePath
- 源虚拟环境路径targetPath
- 目标虚拟环境路径
返回值:
error
- 错误信息
示例:
go
if err := manager.CloneVenv("./source-env", "./target-env"); err != nil {
log.Fatalf("克隆虚拟环境失败: %v", err)
}
ExportVenv
导出虚拟环境配置。
go
func (m *Manager) ExportVenv(path, outputFile string) error
参数:
path
- 虚拟环境路径outputFile
- 输出文件路径
返回值:
error
- 错误信息
示例:
go
if err := manager.ExportVenv("./my-env", "environment.yml"); err != nil {
log.Fatalf("导出虚拟环境失败: %v", err)
}
ImportVenv
从配置文件导入虚拟环境。
go
func (m *Manager) ImportVenv(configFile, targetPath string) error
参数:
configFile
- 配置文件路径targetPath
- 目标虚拟环境路径
返回值:
error
- 错误信息
示例:
go
if err := manager.ImportVenv("environment.yml", "./imported-env"); err != nil {
log.Fatalf("导入虚拟环境失败: %v", err)
}
UpdateVenv
更新虚拟环境。
go
func (m *Manager) UpdateVenv(path string) error
参数:
path
- 虚拟环境路径
返回值:
error
- 错误信息
示例:
go
if err := manager.UpdateVenv("./my-env"); err != nil {
log.Fatalf("更新虚拟环境失败: %v", err)
}
CleanVenv
清理虚拟环境缓存。
go
func (m *Manager) CleanVenv(path string) error
参数:
path
- 虚拟环境路径
返回值:
error
- 错误信息
示例:
go
if err := manager.CleanVenv("./my-env"); err != nil {
log.Fatalf("清理虚拟环境失败: %v", err)
}
批量操作
CreateMultipleVenvs
批量创建虚拟环境。
go
func (m *Manager) CreateMultipleVenvs(configs []*VenvConfig) error
示例:
go
configs := []*pip.VenvConfig{
{Path: "./env1", PythonVersion: "3.8"},
{Path: "./env2", PythonVersion: "3.9"},
{Path: "./env3", PythonVersion: "3.10"},
}
if err := manager.CreateMultipleVenvs(configs); err != nil {
log.Fatalf("批量创建虚拟环境失败: %v", err)
}
RemoveMultipleVenvs
批量删除虚拟环境。
go
func (m *Manager) RemoveMultipleVenvs(paths []string) error
示例:
go
paths := []string{"./old-env1", "./old-env2", "./old-env3"}
if err := manager.RemoveMultipleVenvs(paths); err != nil {
log.Fatalf("批量删除虚拟环境失败: %v", err)
}
环境检查
ValidateVenv
验证虚拟环境完整性。
go
func (m *Manager) ValidateVenv(path string) ([]*VenvIssue, error)
示例:
go
issues, err := manager.ValidateVenv("./my-env")
if err != nil {
log.Fatalf("验证虚拟环境失败: %v", err)
}
if len(issues) > 0 {
fmt.Println("发现以下问题:")
for _, issue := range issues {
fmt.Printf("- %s: %s\n", issue.Type, issue.Message)
}
}
RepairVenv
修复虚拟环境。
go
func (m *Manager) RepairVenv(path string) error
示例:
go
if err := manager.RepairVenv("./broken-env"); err != nil {
log.Fatalf("修复虚拟环境失败: %v", err)
}
错误处理
虚拟环境操作可能遇到的错误类型:
go
if err := manager.CreateVenv(path); err != nil {
switch {
case pip.IsErrorType(err, pip.ErrorTypeVenvExists):
fmt.Println("虚拟环境已存在")
case pip.IsErrorType(err, pip.ErrorTypePythonNotFound):
fmt.Println("Python 未找到")
case pip.IsErrorType(err, pip.ErrorTypePermissionDenied):
fmt.Println("权限被拒绝")
case pip.IsErrorType(err, pip.ErrorTypeInsufficientSpace):
fmt.Println("磁盘空间不足")
default:
fmt.Printf("其他错误: %v\n", err)
}
}
最佳实践
- 为每个项目创建独立的虚拟环境
- 使用有意义的环境名称
- 定期清理不用的虚拟环境
- 在虚拟环境中安装项目依赖
- 导出环境配置以便复现