cuda-switch


Namecuda-switch JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/yourusername/cuda-switch
SummaryA tool for managing multiple CUDA versions on macOS
upload_time2025-08-15 02:41:21
maintainerNone
docs_urlNone
authorJason Wang
requires_python>=3.7
licenseMIT
keywords cuda nvidia gpu development macos
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # CUDA版本切换工具 - Python版本

一个功能完善的CUDA版本管理和切换工具,使用Python实现,提供更好的跨平台兼容性和更稳定的性能。

## 特性

### 🔍 智能版本检测
- **多源检测**: 支持系统安装、当前环境、Conda环境等多种CUDA安装源
- **精确识别**: 自动识别版本号和安装路径
- **去重排序**: 智能去重并按版本号排序

### 🎯 模糊版本匹配
- **精确匹配**: 完全相同版本号优先匹配
- **前缀匹配**: 12.8匹配12.8.1等子版本
- **主次版本匹配**: 12.3匹配12.3.x系列
- **主版本匹配**: 12匹配12.x.x系列

### ⚙️ 自动环境配置
- **PATH管理**: 智能清理旧路径,添加新CUDA路径
- **环境变量**: 自动配置CUDA_HOME、LD_LIBRARY_PATH
- **符号链接**: 创建/更新/usr/local/cuda软链接
- **配置持久化**: 自动写入shell配置文件

## 安装

### 方法1: 使用安装脚本
```bash
cd cuda_switch_python
python3 install.py
```

### 方法2: 手动安装
```bash
# 复制到系统路径
sudo cp cuda_switch.py /usr/local/bin/cuda-switch
sudo chmod +x /usr/local/bin/cuda-switch

# 或复制到用户路径
mkdir -p ~/.local/bin
cp cuda_switch.py ~/.local/bin/cuda-switch
chmod +x ~/.local/bin/cuda-switch
export PATH="$HOME/.local/bin:$PATH"
```

## 使用方法

### 基本用法
```bash
# 列出所有可用版本
cuda-switch

# 切换到指定版本
cuda-switch 12.8

# 切换到具体子版本
cuda-switch 12.8.1

# 启用调试模式
cuda-switch --debug 12.8
```

### 高级用法
```bash
# 仅列出版本(不进行切换)
cuda-switch --list

# 主版本匹配(切换到最新的12.x版本)
cuda-switch 12

# 主次版本匹配(切换到最新的12.8.x版本)
cuda-switch 12.8
```

## 项目架构

### 核心类设计

#### CudaVersion
```python
@dataclass
class CudaVersion:
    source: str  # 来源:系统、当前、conda等
    version: str # 版本号:如12.8.1
    path: str   # 安装路径
```

#### CudaDetector
- 负责检测系统中所有可用的CUDA版本
- 支持多种安装源:系统路径、conda环境等
- 智能解析版本号和路径信息

#### CudaMatcher
- 实现智能的版本匹配算法
- 支持精确匹配、前缀匹配、主次版本匹配等
- 处理版本号标准化和比较

#### CudaSwitcher
- 负责实际的版本切换操作
- 管理环境变量和PATH配置
- 创建符号链接和持久化配置

#### CudaManager
- 主控制器,协调各个组件
- 提供统一的用户接口
- 处理用户交互和错误处理

## 相比Shell版本的优势

### 🚀 更好的性能
- **无shell兼容性问题**: 不再受bash/zsh差异影响
- **更快的执行速度**: Python解释器比shell脚本更高效
- **内存管理优化**: 避免了shell脚本的内存泄漏问题

### 🛡️ 更高的稳定性
- **异常处理机制**: 完善的try-catch错误处理
- **类型安全**: 使用dataclass和类型提示
- **测试友好**: 模块化设计便于单元测试

### 👥 更好的用户体验
- **清晰的输出格式**: 结构化的信息显示
- **交互式选择**: 多版本匹配时的用户选择界面
- **详细的帮助信息**: 完整的命令行参数说明

### 🔧 更强的可维护性
- **面向对象设计**: 清晰的类结构和职责分离
- **模块化架构**: 各组件独立,便于扩展
- **代码可读性**: Python语法更清晰易懂

## 技术特点

### 数据结构优化
- 使用`CudaVersion`数据类统一管理版本信息
- 避免了shell脚本中的字符串解析问题
- 支持结构化的版本比较和排序

### 错误处理
- 完善的异常捕获和处理机制
- 用户友好的错误提示信息
- 优雅的降级处理策略

### 跨平台兼容
- 纯Python实现,支持Linux、macOS等系统
- 自动检测shell类型和配置文件
- 智能的权限处理和sudo降级

## 使用示例

### 场景1: 开发环境切换
```bash
# 当前使用CUDA 12.4,需要切换到12.8进行新项目开发
$ cuda-switch 12.8
✅ CUDA 12.8.1 已成功配置
当前路径: /usr/local/cuda-12.8
请运行以下命令使更改生效:
   source ~/.zshrc
```

### 场景2: 多版本管理
```bash
# 查看所有可用版本
$ cuda-switch
可用CUDA版本:
  - [系统] 12.2.20230823
  - [系统] 12.4.1
  - [系统] 12.8.1
  - [当前] 12.4
  - [conda] 11.8
```

### 场景3: 调试模式
```bash
# 启用调试模式查看详细过程
$ cuda-switch --debug 12.8
[DEBUG] 开始检测CUDA版本...
[DEBUG] 检测到系统版本: 3个
[DEBUG] 检测到当前版本: 12.4
[DEBUG] 去重后版本数量: 4
[DEBUG] 开始匹配目标版本: 12.8
[DEBUG] 找到匹配版本: 1个
[DEBUG] 开始切换到版本: [系统] 12.8.1
```

## 故障排除

### 常见问题

1. **权限不足**
   ```bash
   # 使用sudo运行安装脚本
   sudo python3 install.py
   ```

2. **PATH未更新**
   ```bash
   # 手动添加到PATH
   export PATH="$HOME/.local/bin:$PATH"
   ```

3. **版本检测失败**
   ```bash
   # 使用调试模式查看详细信息
   cuda-switch --debug --list
   ```

## 开发计划

- [ ] 支持CUDA版本下载和安装
- [ ] 添加配置文件支持
- [ ] 实现版本锁定功能
- [ ] 添加更多的安装源支持
- [ ] 提供Web界面管理

## 贡献

欢迎提交Issue和Pull Request来改进这个工具!

## 许可证

MIT License

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/yourusername/cuda-switch",
    "name": "cuda-switch",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "cuda, nvidia, gpu, development, macos",
    "author": "Jason Wang",
    "author_email": "Jason Wang <your-email@example.com>",
    "download_url": "https://files.pythonhosted.org/packages/fc/39/ab6ad5f06a5e55cd7a9bbe17d08599c9c319e18a91cd255418b5914045b5/cuda_switch-1.0.0.tar.gz",
    "platform": null,
    "description": "# CUDA\u7248\u672c\u5207\u6362\u5de5\u5177 - Python\u7248\u672c\n\n\u4e00\u4e2a\u529f\u80fd\u5b8c\u5584\u7684CUDA\u7248\u672c\u7ba1\u7406\u548c\u5207\u6362\u5de5\u5177\uff0c\u4f7f\u7528Python\u5b9e\u73b0\uff0c\u63d0\u4f9b\u66f4\u597d\u7684\u8de8\u5e73\u53f0\u517c\u5bb9\u6027\u548c\u66f4\u7a33\u5b9a\u7684\u6027\u80fd\u3002\n\n## \u7279\u6027\n\n### \ud83d\udd0d \u667a\u80fd\u7248\u672c\u68c0\u6d4b\n- **\u591a\u6e90\u68c0\u6d4b**: \u652f\u6301\u7cfb\u7edf\u5b89\u88c5\u3001\u5f53\u524d\u73af\u5883\u3001Conda\u73af\u5883\u7b49\u591a\u79cdCUDA\u5b89\u88c5\u6e90\n- **\u7cbe\u786e\u8bc6\u522b**: \u81ea\u52a8\u8bc6\u522b\u7248\u672c\u53f7\u548c\u5b89\u88c5\u8def\u5f84\n- **\u53bb\u91cd\u6392\u5e8f**: \u667a\u80fd\u53bb\u91cd\u5e76\u6309\u7248\u672c\u53f7\u6392\u5e8f\n\n### \ud83c\udfaf \u6a21\u7cca\u7248\u672c\u5339\u914d\n- **\u7cbe\u786e\u5339\u914d**: \u5b8c\u5168\u76f8\u540c\u7248\u672c\u53f7\u4f18\u5148\u5339\u914d\n- **\u524d\u7f00\u5339\u914d**: 12.8\u5339\u914d12.8.1\u7b49\u5b50\u7248\u672c\n- **\u4e3b\u6b21\u7248\u672c\u5339\u914d**: 12.3\u5339\u914d12.3.x\u7cfb\u5217\n- **\u4e3b\u7248\u672c\u5339\u914d**: 12\u5339\u914d12.x.x\u7cfb\u5217\n\n### \u2699\ufe0f \u81ea\u52a8\u73af\u5883\u914d\u7f6e\n- **PATH\u7ba1\u7406**: \u667a\u80fd\u6e05\u7406\u65e7\u8def\u5f84\uff0c\u6dfb\u52a0\u65b0CUDA\u8def\u5f84\n- **\u73af\u5883\u53d8\u91cf**: \u81ea\u52a8\u914d\u7f6eCUDA_HOME\u3001LD_LIBRARY_PATH\n- **\u7b26\u53f7\u94fe\u63a5**: \u521b\u5efa/\u66f4\u65b0/usr/local/cuda\u8f6f\u94fe\u63a5\n- **\u914d\u7f6e\u6301\u4e45\u5316**: \u81ea\u52a8\u5199\u5165shell\u914d\u7f6e\u6587\u4ef6\n\n## \u5b89\u88c5\n\n### \u65b9\u6cd51: \u4f7f\u7528\u5b89\u88c5\u811a\u672c\n```bash\ncd cuda_switch_python\npython3 install.py\n```\n\n### \u65b9\u6cd52: \u624b\u52a8\u5b89\u88c5\n```bash\n# \u590d\u5236\u5230\u7cfb\u7edf\u8def\u5f84\nsudo cp cuda_switch.py /usr/local/bin/cuda-switch\nsudo chmod +x /usr/local/bin/cuda-switch\n\n# \u6216\u590d\u5236\u5230\u7528\u6237\u8def\u5f84\nmkdir -p ~/.local/bin\ncp cuda_switch.py ~/.local/bin/cuda-switch\nchmod +x ~/.local/bin/cuda-switch\nexport PATH=\"$HOME/.local/bin:$PATH\"\n```\n\n## \u4f7f\u7528\u65b9\u6cd5\n\n### \u57fa\u672c\u7528\u6cd5\n```bash\n# \u5217\u51fa\u6240\u6709\u53ef\u7528\u7248\u672c\ncuda-switch\n\n# \u5207\u6362\u5230\u6307\u5b9a\u7248\u672c\ncuda-switch 12.8\n\n# \u5207\u6362\u5230\u5177\u4f53\u5b50\u7248\u672c\ncuda-switch 12.8.1\n\n# \u542f\u7528\u8c03\u8bd5\u6a21\u5f0f\ncuda-switch --debug 12.8\n```\n\n### \u9ad8\u7ea7\u7528\u6cd5\n```bash\n# \u4ec5\u5217\u51fa\u7248\u672c\uff08\u4e0d\u8fdb\u884c\u5207\u6362\uff09\ncuda-switch --list\n\n# \u4e3b\u7248\u672c\u5339\u914d\uff08\u5207\u6362\u5230\u6700\u65b0\u768412.x\u7248\u672c\uff09\ncuda-switch 12\n\n# \u4e3b\u6b21\u7248\u672c\u5339\u914d\uff08\u5207\u6362\u5230\u6700\u65b0\u768412.8.x\u7248\u672c\uff09\ncuda-switch 12.8\n```\n\n## \u9879\u76ee\u67b6\u6784\n\n### \u6838\u5fc3\u7c7b\u8bbe\u8ba1\n\n#### CudaVersion\n```python\n@dataclass\nclass CudaVersion:\n    source: str  # \u6765\u6e90\uff1a\u7cfb\u7edf\u3001\u5f53\u524d\u3001conda\u7b49\n    version: str # \u7248\u672c\u53f7\uff1a\u598212.8.1\n    path: str   # \u5b89\u88c5\u8def\u5f84\n```\n\n#### CudaDetector\n- \u8d1f\u8d23\u68c0\u6d4b\u7cfb\u7edf\u4e2d\u6240\u6709\u53ef\u7528\u7684CUDA\u7248\u672c\n- \u652f\u6301\u591a\u79cd\u5b89\u88c5\u6e90\uff1a\u7cfb\u7edf\u8def\u5f84\u3001conda\u73af\u5883\u7b49\n- \u667a\u80fd\u89e3\u6790\u7248\u672c\u53f7\u548c\u8def\u5f84\u4fe1\u606f\n\n#### CudaMatcher\n- \u5b9e\u73b0\u667a\u80fd\u7684\u7248\u672c\u5339\u914d\u7b97\u6cd5\n- \u652f\u6301\u7cbe\u786e\u5339\u914d\u3001\u524d\u7f00\u5339\u914d\u3001\u4e3b\u6b21\u7248\u672c\u5339\u914d\u7b49\n- \u5904\u7406\u7248\u672c\u53f7\u6807\u51c6\u5316\u548c\u6bd4\u8f83\n\n#### CudaSwitcher\n- \u8d1f\u8d23\u5b9e\u9645\u7684\u7248\u672c\u5207\u6362\u64cd\u4f5c\n- \u7ba1\u7406\u73af\u5883\u53d8\u91cf\u548cPATH\u914d\u7f6e\n- \u521b\u5efa\u7b26\u53f7\u94fe\u63a5\u548c\u6301\u4e45\u5316\u914d\u7f6e\n\n#### CudaManager\n- \u4e3b\u63a7\u5236\u5668\uff0c\u534f\u8c03\u5404\u4e2a\u7ec4\u4ef6\n- \u63d0\u4f9b\u7edf\u4e00\u7684\u7528\u6237\u63a5\u53e3\n- \u5904\u7406\u7528\u6237\u4ea4\u4e92\u548c\u9519\u8bef\u5904\u7406\n\n## \u76f8\u6bd4Shell\u7248\u672c\u7684\u4f18\u52bf\n\n### \ud83d\ude80 \u66f4\u597d\u7684\u6027\u80fd\n- **\u65e0shell\u517c\u5bb9\u6027\u95ee\u9898**: \u4e0d\u518d\u53d7bash/zsh\u5dee\u5f02\u5f71\u54cd\n- **\u66f4\u5feb\u7684\u6267\u884c\u901f\u5ea6**: Python\u89e3\u91ca\u5668\u6bd4shell\u811a\u672c\u66f4\u9ad8\u6548\n- **\u5185\u5b58\u7ba1\u7406\u4f18\u5316**: \u907f\u514d\u4e86shell\u811a\u672c\u7684\u5185\u5b58\u6cc4\u6f0f\u95ee\u9898\n\n### \ud83d\udee1\ufe0f \u66f4\u9ad8\u7684\u7a33\u5b9a\u6027\n- **\u5f02\u5e38\u5904\u7406\u673a\u5236**: \u5b8c\u5584\u7684try-catch\u9519\u8bef\u5904\u7406\n- **\u7c7b\u578b\u5b89\u5168**: \u4f7f\u7528dataclass\u548c\u7c7b\u578b\u63d0\u793a\n- **\u6d4b\u8bd5\u53cb\u597d**: \u6a21\u5757\u5316\u8bbe\u8ba1\u4fbf\u4e8e\u5355\u5143\u6d4b\u8bd5\n\n### \ud83d\udc65 \u66f4\u597d\u7684\u7528\u6237\u4f53\u9a8c\n- **\u6e05\u6670\u7684\u8f93\u51fa\u683c\u5f0f**: \u7ed3\u6784\u5316\u7684\u4fe1\u606f\u663e\u793a\n- **\u4ea4\u4e92\u5f0f\u9009\u62e9**: \u591a\u7248\u672c\u5339\u914d\u65f6\u7684\u7528\u6237\u9009\u62e9\u754c\u9762\n- **\u8be6\u7ec6\u7684\u5e2e\u52a9\u4fe1\u606f**: \u5b8c\u6574\u7684\u547d\u4ee4\u884c\u53c2\u6570\u8bf4\u660e\n\n### \ud83d\udd27 \u66f4\u5f3a\u7684\u53ef\u7ef4\u62a4\u6027\n- **\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1**: \u6e05\u6670\u7684\u7c7b\u7ed3\u6784\u548c\u804c\u8d23\u5206\u79bb\n- **\u6a21\u5757\u5316\u67b6\u6784**: \u5404\u7ec4\u4ef6\u72ec\u7acb\uff0c\u4fbf\u4e8e\u6269\u5c55\n- **\u4ee3\u7801\u53ef\u8bfb\u6027**: Python\u8bed\u6cd5\u66f4\u6e05\u6670\u6613\u61c2\n\n## \u6280\u672f\u7279\u70b9\n\n### \u6570\u636e\u7ed3\u6784\u4f18\u5316\n- \u4f7f\u7528`CudaVersion`\u6570\u636e\u7c7b\u7edf\u4e00\u7ba1\u7406\u7248\u672c\u4fe1\u606f\n- \u907f\u514d\u4e86shell\u811a\u672c\u4e2d\u7684\u5b57\u7b26\u4e32\u89e3\u6790\u95ee\u9898\n- \u652f\u6301\u7ed3\u6784\u5316\u7684\u7248\u672c\u6bd4\u8f83\u548c\u6392\u5e8f\n\n### \u9519\u8bef\u5904\u7406\n- \u5b8c\u5584\u7684\u5f02\u5e38\u6355\u83b7\u548c\u5904\u7406\u673a\u5236\n- \u7528\u6237\u53cb\u597d\u7684\u9519\u8bef\u63d0\u793a\u4fe1\u606f\n- \u4f18\u96c5\u7684\u964d\u7ea7\u5904\u7406\u7b56\u7565\n\n### \u8de8\u5e73\u53f0\u517c\u5bb9\n- \u7eafPython\u5b9e\u73b0\uff0c\u652f\u6301Linux\u3001macOS\u7b49\u7cfb\u7edf\n- \u81ea\u52a8\u68c0\u6d4bshell\u7c7b\u578b\u548c\u914d\u7f6e\u6587\u4ef6\n- \u667a\u80fd\u7684\u6743\u9650\u5904\u7406\u548csudo\u964d\u7ea7\n\n## \u4f7f\u7528\u793a\u4f8b\n\n### \u573a\u666f1: \u5f00\u53d1\u73af\u5883\u5207\u6362\n```bash\n# \u5f53\u524d\u4f7f\u7528CUDA 12.4\uff0c\u9700\u8981\u5207\u6362\u523012.8\u8fdb\u884c\u65b0\u9879\u76ee\u5f00\u53d1\n$ cuda-switch 12.8\n\u2705 CUDA 12.8.1 \u5df2\u6210\u529f\u914d\u7f6e\n\u5f53\u524d\u8def\u5f84: /usr/local/cuda-12.8\n\u8bf7\u8fd0\u884c\u4ee5\u4e0b\u547d\u4ee4\u4f7f\u66f4\u6539\u751f\u6548\uff1a\n   source ~/.zshrc\n```\n\n### \u573a\u666f2: \u591a\u7248\u672c\u7ba1\u7406\n```bash\n# \u67e5\u770b\u6240\u6709\u53ef\u7528\u7248\u672c\n$ cuda-switch\n\u53ef\u7528CUDA\u7248\u672c:\n  - [\u7cfb\u7edf] 12.2.20230823\n  - [\u7cfb\u7edf] 12.4.1\n  - [\u7cfb\u7edf] 12.8.1\n  - [\u5f53\u524d] 12.4\n  - [conda] 11.8\n```\n\n### \u573a\u666f3: \u8c03\u8bd5\u6a21\u5f0f\n```bash\n# \u542f\u7528\u8c03\u8bd5\u6a21\u5f0f\u67e5\u770b\u8be6\u7ec6\u8fc7\u7a0b\n$ cuda-switch --debug 12.8\n[DEBUG] \u5f00\u59cb\u68c0\u6d4bCUDA\u7248\u672c...\n[DEBUG] \u68c0\u6d4b\u5230\u7cfb\u7edf\u7248\u672c: 3\u4e2a\n[DEBUG] \u68c0\u6d4b\u5230\u5f53\u524d\u7248\u672c: 12.4\n[DEBUG] \u53bb\u91cd\u540e\u7248\u672c\u6570\u91cf: 4\n[DEBUG] \u5f00\u59cb\u5339\u914d\u76ee\u6807\u7248\u672c: 12.8\n[DEBUG] \u627e\u5230\u5339\u914d\u7248\u672c: 1\u4e2a\n[DEBUG] \u5f00\u59cb\u5207\u6362\u5230\u7248\u672c: [\u7cfb\u7edf] 12.8.1\n```\n\n## \u6545\u969c\u6392\u9664\n\n### \u5e38\u89c1\u95ee\u9898\n\n1. **\u6743\u9650\u4e0d\u8db3**\n   ```bash\n   # \u4f7f\u7528sudo\u8fd0\u884c\u5b89\u88c5\u811a\u672c\n   sudo python3 install.py\n   ```\n\n2. **PATH\u672a\u66f4\u65b0**\n   ```bash\n   # \u624b\u52a8\u6dfb\u52a0\u5230PATH\n   export PATH=\"$HOME/.local/bin:$PATH\"\n   ```\n\n3. **\u7248\u672c\u68c0\u6d4b\u5931\u8d25**\n   ```bash\n   # \u4f7f\u7528\u8c03\u8bd5\u6a21\u5f0f\u67e5\u770b\u8be6\u7ec6\u4fe1\u606f\n   cuda-switch --debug --list\n   ```\n\n## \u5f00\u53d1\u8ba1\u5212\n\n- [ ] \u652f\u6301CUDA\u7248\u672c\u4e0b\u8f7d\u548c\u5b89\u88c5\n- [ ] \u6dfb\u52a0\u914d\u7f6e\u6587\u4ef6\u652f\u6301\n- [ ] \u5b9e\u73b0\u7248\u672c\u9501\u5b9a\u529f\u80fd\n- [ ] \u6dfb\u52a0\u66f4\u591a\u7684\u5b89\u88c5\u6e90\u652f\u6301\n- [ ] \u63d0\u4f9bWeb\u754c\u9762\u7ba1\u7406\n\n## \u8d21\u732e\n\n\u6b22\u8fce\u63d0\u4ea4Issue\u548cPull Request\u6765\u6539\u8fdb\u8fd9\u4e2a\u5de5\u5177\uff01\n\n## \u8bb8\u53ef\u8bc1\n\nMIT License\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A tool for managing multiple CUDA versions on macOS",
    "version": "1.0.0",
    "project_urls": {
        "Bug Reports": "https://github.com/yourusername/cuda-switch/issues",
        "Homepage": "https://github.com/yourusername/cuda-switch",
        "Source Code": "https://github.com/yourusername/cuda-switch"
    },
    "split_keywords": [
        "cuda",
        " nvidia",
        " gpu",
        " development",
        " macos"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "479c933edaae20ef1d8ff57b6577adb0f85ab0a666e2461010d6ea0185de01ab",
                "md5": "d5b7ce5698fe26a241c4eb0345de6e7c",
                "sha256": "7a6cadcaa8047770f5f001cb924460be72b8c423ba0eb14b198e01233eb2fb35"
            },
            "downloads": -1,
            "filename": "cuda_switch-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d5b7ce5698fe26a241c4eb0345de6e7c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 19144,
            "upload_time": "2025-08-15T02:41:20",
            "upload_time_iso_8601": "2025-08-15T02:41:20.257187Z",
            "url": "https://files.pythonhosted.org/packages/47/9c/933edaae20ef1d8ff57b6577adb0f85ab0a666e2461010d6ea0185de01ab/cuda_switch-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fc39ab6ad5f06a5e55cd7a9bbe17d08599c9c319e18a91cd255418b5914045b5",
                "md5": "7d23a90ad8b5547370efc12b9dd24f43",
                "sha256": "a33346cae70c2acada32bc86e3a63a95b80b5f6eccfc3f5f995ec0c1d0822a5d"
            },
            "downloads": -1,
            "filename": "cuda_switch-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "7d23a90ad8b5547370efc12b9dd24f43",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 29324,
            "upload_time": "2025-08-15T02:41:21",
            "upload_time_iso_8601": "2025-08-15T02:41:21.966552Z",
            "url": "https://files.pythonhosted.org/packages/fc/39/ab6ad5f06a5e55cd7a9bbe17d08599c9c319e18a91cd255418b5914045b5/cuda_switch-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-15 02:41:21",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "yourusername",
    "github_project": "cuda-switch",
    "github_not_found": true,
    "lcname": "cuda-switch"
}
        
Elapsed time: 0.67908s