跳到主要内容

nouv(純 Nolang Python 包管理器)

notools 倉庫內含一個純 Nolang 實現的 Python 包和項目管理器(nouv/ 目錄),兼容 uv 和 pip 接口,管理完整的 Python 項目生命週期。

特性​

  • pip 兼容接口(install / uninstall / freeze / list / show / compile / sync)
  • 完整的 pyproject.toml 項目生命週期管理(init → add → sync → lock → build → publish)
  • 虛擬環境管理(venv 創建、激活提示、依賴升級)
  • Python 版本管理(從 python-build-standalone 下載安裝)
  • 工具管理(uvx/pipx 風格的 ephemeral 環境運行 CLI 工具)
  • 依賴解析器(PEP 508 解析、環境標記求值、版本約束、回溯解析)
  • Lockfile 生成與管理(uv.lock 格式,支持哈希、源信息)
  • Wheel 安裝與構建(ZIP 解壓安裝、entry point 腳本、sdist/wheel 打包)
  • 多源依賴(registry / git / url / path / editable)
  • 全局緩存(wheel/sdist/url/git 去重緩存,prune 清理)
  • Workspace 支持(多包工作區)
  • 全局配置(環境變量、配置文件、pyproject.toml [tool.uv] 層級優先級)

主要命令​

命令說明
init [path]創建新的 Python 項目
add <pkg>添加依賴(--dev、--editable、--group=)
remove <pkg>移除依賴
sync同步環境與依賴
lock生成 uv.lock 鎖文件
run <cmd>在項目環境中運行命令
build構建項目分發
pip install <pkg>pip 兼容安裝接口
venv [path]創建虛擬環境
python install <ver>安裝 Python 版本
tool run <cmd>在臨時環境中運行工具
uvx <pkg>運行工具的快捷方式
cache clean清空緩存

構建與運行​

cd nouv
no build
# 產物位於 nouv/dist/nouv

# 示例:創建新項目
nouv init my-project
cd my-project
nouv add requests
nouv sync
nouv run python main.py

環境變量​

nouv 兼容 uv 的環境變量命名(UV_*),同時支持 pip 的 PIP_* 變量。

變量說明
UV_INDEX_URL主索引 URL
UV_EXTRA_INDEX_URL額外索引 URL
UV_CACHE_DIR緩存目錄
UV_PYTHONPython 版本或路徑
UV_NO_SYNC跳過同步
UV_FROZEN凍結模式
UV_LOCKED鎖定模式
UV_NO_CACHE禁用緩存
UV_LINK_MODE鏈接模式(clone / copy / symlink / hardlink)
UV_TOKENBearer token 認證
UV_PUBLISH_TOKEN發布 token
UV_PUBLISH_URL發布 URL
UV_TOOL_DIR工具安裝目錄
UV_CONFIG_FILE配置文件路徑

模組架構​

模組職責
main.noCLI 入口與命令分發
src/config.nopyproject.toml 配置讀寫
src/dependency.no依賴解析與版本約束
src/resolver.no回溯依賴解析器(PEP 508 + 環境標記)
src/registry.noPyPI 註冊表 HTTP 客戶端(Simple API / JSON API)
src/installer.no包安裝與卸載(wheel / sdist)
src/venv.no虛擬環境管理
src/python.noPython 版本發現與安裝
src/tool.no工具管理(uvx / pipx)
src/lockfile.nouv.lock 鎖文件生成與解析
src/wheel.noWheel 格式處理(解析 / 安裝 / entry point)
src/sdist.no源碼分發包處理(PEP 517 構建後端)
src/cache.no全局緩存管理
src/pep508.noPEP 508 依賴規範解析器
src/markers.noPEP 508 環境標記求值
src/sources.no多源依賴(registry / git / url / path / editable)
src/toml.noTOML 解析器
src/utils.no通用工具函數

已知限制​

  • 註冊表的 JSON API 接口為 stub 實現(待 Nolang JSON 對象迭代 API 完善後補全)
  • nouv self update 尚未實現
  • sdist 構建安裝(install-from-source)為簡化實現
  • 環境標記中 python_version 通過 python3 -c 獲取,依賴系統 Python
  • Wheel 安裝的 entry point 腳本為簡化實現

完整的項目結構等信息請參見 nouv/README.md。