使用Poetry构建Wheel后,Pip无法安装含本地文件依赖的包
问题根源
你用file = "artifacts/pp-0.358.0.tar.gz"配置的是本地相对路径依赖,Poetry构建wheel时只会把这个路径写入wheel的元数据,不会将tar.gz包本身打包进wheel。当在其他环境用pip安装时,pip会在当前环境的对应相对路径下查找该包,自然找不到,所以抛出路径无效的错误。
解决方法
以下是几种可行的方案:
方案1:通过--find-links指定依赖包位置
安装wheel时,给pip加上--find-links参数,指向存放pp-0.358.0.tar.gz的目录,让pip能找到本地的依赖包:
pip3 install /Users/av/Projects/package_name/dist/package_name-0.0.0-py3-none-any.whl --find-links=/Users/av/Projects/package_name/artifacts/
注意:这个路径需要是绝对路径,确保目标环境能访问到该文件(比如复制artifacts目录到目标环境对应位置,或者用共享路径)。
方案2:将pp包上传到PyPI仓库(私有/公共)
把pp-0.358.0.tar.gz上传到私有PyPI仓库或者公共PyPI(如果允许),然后修改pyproject.toml里的依赖配置为仓库版本:
[tool.poetry.dependencies] python = "~3.8" pp = "0.358.0" # 如果是私有仓库,添加仓库配置 [[tool.poetry.source]] name = "private-pypi" url = "https://your-private-pypi-url/"
之后重新构建wheel,pip安装时会自动从指定仓库拉取pp包。
方案3:将pp作为本地项目依赖(若pp是你维护的项目)
如果pp是你自己的本地项目,把它的路径作为依赖配置,而非归档文件:
pp = { path = "../pp-project", develop = false }
重新构建wheel后,目标环境需要能访问到pp项目的路径,这种方式更适合本地开发场景。
内容的提问来源于stack exchange,提问作者Andrej Vilenskij
相关产品推荐
相关产品推荐

