Skip to main content

A fast pip tool with domestic mirror sources

Project description

qpip

qpip 是一个面向 Python 开发者的命令行工具:默认用更快的镜像执行 pip,同时补上几个常见的项目级工作流,包括脚本运行、项目初始化和虚拟环境管理。

它的核心设计很简单:

  • 始终调用当前解释器的 python -m pip
  • 默认注入国内镜像,但不强行覆盖你已经手动指定的源
  • 尽量保持 pip 的原始参数习惯,只增加少量高频别名和项目命令

功能概览

  • 支持 install / i
  • 支持 update / up,等价于 pip install --upgrade ...
  • 支持 uninstall / un
  • installdownloadwheelindexsearch 这类网络相关命令自动注入镜像
  • 支持位置镜像和 --mirror 两种选源方式
  • 支持 --dry-run 预览最终命令
  • 支持 qpip run,按 pyproject.toml 运行项目脚本
  • 支持 qpip init,快速生成基础项目文件
  • 支持 qpip venvqpip activeqpip deactivate
  • 输出、错误提示、帮助文本均为中文

安装

pip install qpip

要求:

  • Python 3.8+

快速开始

qpip install requests
qpip i httpx
qpip up fastapi
qpip un requests
qpip tsinghua install numpy
qpip --dry-run install pandas

镜像机制

内置镜像:

  • ali: https://mirrors.aliyun.com/pypi/simple/
  • tsinghua: https://pypi.tuna.tsinghua.edu.cn/simple/
  • douban: https://pypi.doubanio.com/simple/
  • pypi: https://pypi.org/simple/

镜像别名:

  • aliyun -> ali
  • tuna -> tsinghua
  • pip -> pypi
  • official -> pypi

查看镜像列表:

qpip --list-mirrors

修改默认镜像:

set QPIP_DEFAULT_MIRROR=tsinghua
qpip install httpx

如果 QPIP_DEFAULT_MIRROR 的值无效,qpip 会给出警告并回退到默认镜像 ali

什么时候会自动注入镜像

会自动加上 -i <mirror-url> 的命令:

  • install
  • i
  • update
  • up
  • download
  • wheel
  • index
  • search

不会覆盖你已经明确指定源的场景。如果参数里已经有以下任意选项,qpip 不再注入镜像:

  • -i
  • --index-url
  • --extra-index-url
  • -f
  • --find-links
  • --no-index

命令用法

安装、升级、卸载

安装:

qpip install requests
qpip i -r requirements.txt
qpip douban install pandas

升级:

qpip update requests
qpip up requests fastapi
qpip up -r requirements.txt

qpip update / qpip up 会转换为:

python -m pip install --upgrade ...

如果 update 后没有提供包名,也没有 -r/--requirement,命令会报错。

卸载:

qpip uninstall requests
qpip un -y requests
qpip uninstall -r requirements.txt

qpip uninstall / qpip un 会转换为:

python -m pip uninstall ...

直接透传 pip 子命令

除了上面的别名,qpip 也可以直接透传其他 pip 子命令:

qpip download httpx
qpip wheel requests
qpip index versions pip

最终仍然是通过当前解释器执行:

python -m pip ...

全局选项

帮助:

qpip --help

预览最终命令但不执行:

qpip --dry-run install fastapi
qpip --dry-run init -y
qpip --dry-run run test
qpip --dry-run venv

按名称指定镜像:

qpip --mirror tsinghua install numpy

也可以把镜像名放在最前面:

qpip tsinghua install numpy
qpip pip install numpy

如果要把以 - 开头的参数原样传给 pip,请用 -- 截断 qpip 自己的参数解析:

qpip -- --version

项目脚本

qpip run 的目标是提供接近 npm run 的体验。

它会在当前目录查找 pyproject.toml,并按下面的优先级读取脚本:

  1. [tool.qpip.scripts]
  2. [project.scripts]
  3. [project.gui-scripts]
  4. [tool.poetry.scripts]

如果存在 [tool.qpip.scripts],就只使用它,不再回退后面的表。

tool.qpip.scripts 示例

[tool.qpip.scripts]
test = "python -m unittest discover -s tests -v"
build = "python -m build"
"lint:check" = "python -m ruff check ."

列出脚本:

qpip run

执行脚本:

qpip run test
qpip run build
qpip run lint:check

向脚本传参:

qpip run test -- -k api
qpip run build -- --wheel

说明:

  • qpip run <script> 在当前项目目录执行脚本
  • 传递额外参数时必须使用 --
  • 如果脚本名包含 : 等特殊字符,TOML key 需要加引号
  • 没有 pyproject.toml 时会报错
  • 没有任何受支持的 scripts 表时也会报错

兼容已有项目脚本

如果项目没有 [tool.qpip.scripts]qpip run 会兼容这些表:

[project.scripts]
serve = "demo.cli:main"

[project.gui-scripts]
desktop = "demo.gui:start"

[tool.poetry.scripts]
worker = "demo.worker:main"

这些脚本会按 entry point 方式导入并执行目标函数。

项目初始化

qpip init
qpip init -y
qpip init --yes

qpip init 会在当前目录生成基础项目文件。

生成的 pyproject.toml 至少包含如下核心结构;实际内容会根据交互输入补充 authorslicense 等字段:

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "your-project"
version = "0.1.0"
description = ""
readme = "README.md"
requires-python = ">=3.8"
dependencies = []

[tool.qpip.scripts]
test = "python -m unittest discover -s tests -v"

如果当前目录没有 README.md,还会额外创建一个最小 README。

交互模式

不带 -y 时,会依次询问这些字段:

  • 项目名称
  • 版本
  • 描述
  • Python 版本要求
  • 作者
  • 邮箱
  • 许可证

默认值来源:

  • 项目名称:当前目录名规范化后的结果
  • 版本:0.1.0
  • Python 版本要求:>=3.8
  • 作者:QPIP_INIT_AUTHORGIT_AUTHOR_NAMEUSERNAMEUSER 中的第一个可用值
  • 邮箱:QPIP_INIT_EMAILGIT_AUTHOR_EMAIL
  • 许可证:MIT

交互模式会先预览生成内容,再确认是否写入:

确认写入 pyproject.toml 吗?([Y]/n):

行为说明

  • --dry-run 只预览,不写文件
  • 如果当前目录已经存在 pyproject.toml,会直接取消,避免覆盖
  • 当前 init 只接受 -y--yes

虚拟环境

创建项目虚拟环境:

qpip venv

它会执行:

python -m venv .venv

同时会确保当前项目根目录的 .gitignore 包含:

.venv/

如果 .gitignore 不存在会自动创建;如果已经存在对应规则则不会重复追加。

激活命令

查看当前 shell 对应的激活命令:

qpip active

默认输出示例:

  • Linux / macOS: source .venv/bin/activate
  • Windows PowerShell: & .\.venv\Scripts\Activate.ps1
  • Windows Bash: source .venv/Scripts/activate
  • Windows CMD: call .\.venv\Scripts\activate.bat

qpip active 只输出命令,不会直接修改父 shell 会话。要在当前终端立即生效:

POSIX shell:

eval "$(qpip active)"

PowerShell:

qpip active | Invoke-Expression

CMD:

for /f "delims=" %i in ('qpip active') do %i

退出虚拟环境

qpip deactivate

这个命令同样只输出当前 shell 可执行的退出命令。

手动指定 shell 类型

如果自动识别 shell 结果不符合你的终端环境,可以设置 QPIP_SHELL 手动覆盖。

可用值包括:

  • linux
  • mac
  • macos
  • darwin
  • powershell
  • pwsh
  • windows-powershell
  • bash
  • git-bash
  • windows-bash
  • cmd
  • windows-cmd

示例:

set QPIP_SHELL=powershell
qpip active

环境变量

  • QPIP_DEFAULT_MIRROR: 设置默认镜像
  • QPIP_INIT_AUTHOR: qpip init 的默认作者名
  • QPIP_INIT_EMAIL: qpip init 的默认邮箱
  • QPIP_SHELL: 覆盖 active / deactivate 的 shell 检测结果

开发

仓库自身提供了两个项目脚本:

qpip run test
qpip run build

等价配置位于:

[tool.qpip.scripts]
test = "python -m unittest discover -s tests -v"
build = "python -m build"

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qpip-0.2.2.tar.gz (26.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qpip-0.2.2-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file qpip-0.2.2.tar.gz.

File metadata

  • Download URL: qpip-0.2.2.tar.gz
  • Upload date:
  • Size: 26.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for qpip-0.2.2.tar.gz
Algorithm Hash digest
SHA256 7c627a35095837846ca0f067f4e9c9bb6f574efee578bc9b7ba76d948b31dc96
MD5 2db174fa37af5a3ca5db75406490875f
BLAKE2b-256 73a629d93c6a53117b7eff07aabdc9b90469ec95513a96d4342e8d0ca52d1506

See more details on using hashes here.

File details

Details for the file qpip-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: qpip-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 20.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for qpip-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 95c8a6f8b2fc37fed438468b12d67997c34765035cde60ece0515f2d638a28e4
MD5 47cf8155e1b0e11236ff9c15365348c9
BLAKE2b-256 a7a7b8d03c06807510769b546910bfc1d7940b17acb93083c80fc9209d97b633

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page