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 activateqpip 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 activate

默认输出示例:

  • 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 activate 只输出命令,不会直接修改父 shell 会话。要在当前终端立即生效:

POSIX shell:

eval "$(qpip activate)"

PowerShell:

qpip activate | Invoke-Expression

CMD:

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

检查是否已激活

qpip active

输出规则:

  • 当前项目的 .venv 已激活时返回 0
  • 未激活任何虚拟环境,或当前激活的是其他虚拟环境时返回 1

这让它既可以直接看结果,也可以用于脚本判断:

qpip active && echo ok

退出虚拟环境

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 activate

环境变量

  • QPIP_DEFAULT_MIRROR: 设置默认镜像
  • QPIP_INIT_AUTHOR: qpip init 的默认作者名
  • QPIP_INIT_EMAIL: qpip init 的默认邮箱
  • QPIP_SHELL: 覆盖 activate / 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.3.tar.gz (27.8 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.3-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: qpip-0.2.3.tar.gz
  • Upload date:
  • Size: 27.8 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.3.tar.gz
Algorithm Hash digest
SHA256 7e536f03957e52fd4d70735d6c0dec2b2ca7d9a974c81e003f3c31e0e8212a58
MD5 e130eca3b0d745996801e92c04b4614c
BLAKE2b-256 595fc5cd43c19fb91b00d56c1c6da78ee387fcf893ad10f837526720d2a6b8e8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qpip-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 21.4 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b37cb5aec58e149dce7299be5d14b471f83b9cae7fe46775fe80073543376295
MD5 54d7fd52f6135603bafc9fe6a29a63d7
BLAKE2b-256 7a5a724db96b916f131fe2bba4cfb10dce9d2941c3d7b02e77dc5bb66ebbbc3d

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