You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用星号版本规则安装Python包开发版并适配配置文件

如何用版本控制安装setuptools_scm生成的Python开发包

这个问题我之前也碰到过,核心原因是pip默认的版本匹配规则不会包含预发布版本,而setuptools_scm生成的0.2.dev0+gebdc597这类属于PEP 440定义的预发布版本,直接用==0.2.*是匹配不到的。下面给出兼容pip和setuptools的解决方案:

一、理解为什么==0.2.*失败

根据PEP 440规范,==x.y.*等价于>=x.y.0, <x.(y+1).0,它只会匹配正式发布版本(比如0.2.0、0.2.1),完全不包含带dev、a(alpha)、b(beta)后缀的预发布版本。这就是你执行pip install my-package==0.2.*找不到版本的原因。

二、直接安装开发版本的正确命令

要让pip识别并安装预发布版本,你需要结合--pre参数,再用PEP 440兼容的范围匹配语法:

方式1:用范围明确指定

pip install --pre "my-package>=0.2.dev0,<0.3"

这个写法会匹配所有0.2.x系列的开发版本(包括0.2.dev0+gebdc597、0.2.dev1+gxxxxxx等),同时不会匹配0.3.0及以上的正式版。

方式2:用~=近似版本运算符(更简洁)

pip install --pre "my-package~=0.2.dev"

~=0.2.dev的效果和上面的范围一致,它会匹配所有以0.2.dev开头的版本,直到0.3.0正式版发布。

注意:--pre参数是必须的,除非你的pip配置默认包含预发布版本(一般不推荐全局开启)。

三、在requirements.txt中的写法

和命令行写法完全一致,直接把范围规则写进去即可:

# 写法1:明确范围
my-package>=0.2.dev0,<0.3

# 写法2:近似版本
my-package~=0.2.dev

如果你的环境需要强制安装预发布版本,可以在安装时加上--pre参数:

pip install --pre -r requirements.txt

四、在setup.py/install_requires中的写法

setuptools完全遵循PEP 440规范,所以写法和requirements.txt完全一致,无需额外处理:

from setuptools import setup

setup(
    name="your-package",
    version="0.1.0",
    install_requires=[
        # 二选一即可
        "my-package>=0.2.dev0,<0.3",
        # "my-package~=0.2.dev",
    ],
)

这样无论是用pip安装你的包,还是用setuptools构建,版本匹配逻辑都是统一的。

额外技巧:直接从Git仓库安装开发版

如果你的包托管在Git仓库(比如GitHub),也可以直接安装最新的开发分支版本,这种方式无需依赖PyPI上的预发布包:

pip install git+https://github.com/your-username/your-repo.git@main#egg=my-package

这个写法也可以直接放到requirements.txt或install_requires中,适合内部开发场景。

内容的提问来源于stack exchange,提问作者xliiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:57:25