go - 如何找到导致“Sirupsen/logrus”与“sirupsen/logrus”意外模块路径错误的依赖关系?
问题描述
我正在尝试将https://github.com/appscode/voyager从 glide 转换为 go mod。
我收到如下错误:
go: github.com/Sirupsen/logrus@v1.4.1: parsing go.mod: unexpected module path "github.com/sirupsen/logrus"
go: error loading module requirements
如何找到这个旧的 Sirupsen 模块的来源?
解决方案
如何找到这个旧的 Sirupsen 模块的来源?
使用 Go 1.13 beta ( go get golang.org/dl/go1.13beta1 && go1.13beta1 download
) 甚至更好,尝试最新的 Go on tip / master ( go get golang.org/dl/gotip && gotip download
)。
Go 1.13 总体上改进了错误消息。它应该对您的情况有所帮助,包括最有可能显示导致错误的导入链。
例如:
$ gotip build .
go: example.com/temp/mod imports
github.com/docker/libcompose/docker imports
github.com/Sirupsen/logrus: github.com/Sirupsen/logrus@v1.4.2: parsing go.mod:
module declares its path as: github.com/Sirupsen/logrus
but was required as: github.com/sirupsen/logrus
在该示例中,您可以看到docker/libcompose/docker
正在导入旧的且现在不正确的大写版本的Sirupsen/logrus
.
Sirupsen/logrus
人们看到vs. case 不匹配的最常见原因sirupsen/logrus
是在导入github.com/docker/docker
或其他 docker 存储库之一时。导入 docker repos 与模块有点混淆,包括因为:
docker/docker
回购不遵循 semver 。- 回购中有一个非常古老的
v1.13.1
semver 标签docker/docker
。- 即使它已经有几年历史了,它仍然是该 repo 上的“最新”semver 标签,因此
go
如果您不要求更具体的版本,命令默认选择旧版本。 - 该旧
docker/docker
版本导入旧的且不正确的大写字母Sirupsen/logrus
,然后会触发上述问题中报告的错误。
- 即使它已经有几年历史了,它仍然是该 repo 上的“最新”semver 标签,因此
- docker 客户端包在 v1.13.1 之后发生了重大变化。
- 关于
docker/docker
与docker/engine
存储库以及使用什么导入路径通常存在混淆。 - docker repos 没有
go.mod
文件。
对于docker/docker
repo,导入路径仍然是github.com/docker/docker
,但它需要来自github.com/docker/engine
,因此推荐的方法通常是让 docker 导入器执行import "github.com/docker/docker"
并将其编辑go.mod
为如下内容:
require (
github.com/docker/docker v1.13.1
)
replace github.com/docker/docker => github.com/docker/engine <tag-or-commit-hash>
Docker 问题#39302跟踪尝试记录使用模块时如何导入 docker repos。
推荐阅读
- python - JSON 对象导航
- java - Eclipse 中的简单 RESTful api 代码给出 HTTP 状态 500 - 内部服务器错误
- excel - VBA 从字符串中获取数据
- php - 未找到作曲家包的 PHP 类
- android - 如何获取操作栏中图标的坐标?
- javascript - Angular 6 - 文本字段更改事件没有数据
- scala - 如何在一个类中拥有一个协变参数以及一个转换它的函数?
- python - 尝试测试一些 url 地址是否适用于 python 请求但出现错误
- r - 如何从列表中找到数据框中的数字?
- mysql - 如何从 MySQL Workbench 的两列中获取最新日期?