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

如何让setuptools使用本地自定义包而非PyPI依赖包?

解决Setuptools优先使用PyPI包而非本地自定义版本的问题

我太懂你这个头疼的问题了——明明已经用pip install -e .装了本地开发版的toga-android,结果setuptools构建项目时非要从PyPI拉取旧版本,甚至还拿缓存凑数。这本质上是因为setuptools默认会优先从PyPI解析依赖,哪怕本地有同版本的可编辑安装包。下面给你几个靠谱的解决办法:

方法1:直接在setup.py里指定本地依赖路径

修改测试项目(比如tutorial0)的setup.py,把toga-android的依赖项改成指向你本地的源码路径,而不是只写版本号。比如:

install_requires = [
    # 保留其他原有依赖
    'toga-core @ file:///path/to/your/local/toga/src/core',
    'toga-android @ file:///path/to/your/local/toga/src/android',
]

如果测试项目和toga源码是同级目录(比如都在~/toga下),还可以用相对路径:

'toga-android @ file://../src/android',

这样setuptools就会直接读取你指定的本地目录里的包,彻底跳过PyPI查询。

方法2:构建时给pip传递参数强制用本地包

执行构建命令的时候,通过--pip-args告诉pip不要去PyPI找,而是从本地路径读取依赖:

python setup.py android --pip-args="--no-index --find-links=/path/to/your/local/toga/src/android"
  • --no-index:禁止pip查询PyPI索引
  • --find-links:指定本地包的存放路径

如果是用pip直接安装项目依赖,也可以这么写:

pip install . --no-index --find-links=/path/to/your/local/toga/src/android

方法3:用requirements.txt锁定本地依赖

创建一个requirements.txt文件,把本地的toga包都加进去:

-e /path/to/your/local/toga/src/core
-e /path/to/your/local/toga/src/android
# 这里加上项目的其他依赖,比如toga-core之类的

然后先安装依赖:

pip install -r requirements.txt

再运行构建命令,setuptools就会优先使用requirements.txt里指定的本地可编辑版本。

额外小技巧:清理pip缓存

有时候pip会死死抱着旧的缓存版本不放,你可以先清掉缓存再试:

pip cache purge

这样就能确保下次构建时不会再用到之前从PyPI下载的缓存包了。

为什么会出现这个问题?

简单来说,setuptools在解析依赖时,默认会优先匹配PyPI上的同版本包——哪怕你本地有可编辑安装的版本。因为可编辑安装的包在pip的内部索引里标记为“开发态”,但setuptools构建时还是会优先去PyPI找符合版本号的“正式”包(哪怕是dev后缀的预发布版)。上面的方法都是通过强制指定路径或者禁用PyPI索引,让setuptools乖乖用你本地的自定义版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:52:36