使用UV添加Python包时STREAMLINK_USE_PYCOUNTRY环境变量不生效求助
在企业环境中用UV安装Streamlink并满足许可证要求的解决方案
问题背景
需要在企业环境中安装Streamlink 1.3.1,需满足两个许可证相关要求:
- 用
--no-binary选项构建Streamlink包 - 通过环境变量
STREAMLINK_USE_PYCOUNTRY=1强制使用pycountry依赖,避免引入GPL协议的iso-639/iso3166依赖
原pip命令可正常工作:
STREAMLINK_USE_PYCOUNTRY=1 pip install streamlink==1.3.1 --no-binary streamlink
但迁移到uv后,直接在命令前设置环境变量的方式无效,环境变量被忽略,导致安装了不符合要求的GPL依赖。
解决方法
uv为了保证环境隔离,默认不会将当前shell的环境变量传递给包构建过程,需要显式指定要传递的环境变量,以下是两种可行方案:
方案1:使用--env选项传递构建环境变量
无论是uv pip install还是uv add命令,都可以通过--env参数直接将环境变量注入到包的构建阶段:
用uv pip install的命令:
uv pip install streamlink==1.3.1 --no-binary streamlink --env STREAMLINK_USE_PYCOUNTRY=1
用uv add的命令:
uv add --group streamlink streamlink==1.3.1 --no-binary-package streamlink --env STREAMLINK_USE_PYCOUNTRY=1
方案2:通过--inherit-env继承当前shell环境变量
如果需要让uv继承当前shell的所有环境变量(或已导出的目标变量),可以添加--inherit-env选项:
先导出环境变量再执行命令:
export STREAMLINK_USE_PYCOUNTRY=1 uv pip install streamlink==1.3.1 --no-binary streamlink --inherit-env
单命令执行:
STREAMLINK_USE_PYCOUNTRY=1 uv pip install streamlink==1.3.1 --no-binary streamlink --inherit-env
原理说明
Streamlink的setup.py会在构建阶段读取STREAMLINK_USE_PYCOUNTRY环境变量,以此决定依赖包的选择。uv默认的环境隔离机制会屏蔽外部环境变量,因此必须通过--env或--inherit-env显式传递该变量,才能让Streamlink的构建逻辑正确触发,选择pycountry而非GPL协议的iso依赖。
内容的提问来源于stack exchange,提问作者Zul
相关产品推荐
相关产品推荐

