Как найти зависимость, вызывающую ошибку пути к неожиданному модулю Sirupsen / logrus vs. sirupsen / logrus?

Я пытаюсь преобразовать https://github.com/appscode/voyager из мода Glide to Go.

Я получаю сообщение об ошибке, как показано ниже:

go: github.com/Sirupsen/[email protected]: parsing go.mod: unexpected module path "github.com/sirupsen/logrus"
go: error loading module requirements

Как мне узнать источник этого старого модуля Sirupsen?


person codefx    schedule 08.05.2019    source источник
comment
Вы пробовали использовать go mod why? Хотя, если вы не можете разобрать go.mod, я не уверен, что вы можете сделать, кроме как удалить путь к вызывающему ошибку модулю. (также убедитесь, что вы используете последнюю версию go для генерации go.mod и запускаете go mod tidy)   -  person JimB    schedule 08.05.2019
comment
Перекрестно размещено: groups.google.com/forum/#! topic / golang-nut / mJcpYYim3-w   -  person peterSO    schedule 08.05.2019
comment
Как мне узнать источник этого старого модуля Sirupsen? - он не старый, он все еще активно поддерживается, и источник находится именно там, где указывает путь импорта: github.com/sirupsen/logrus   -  person Adrian    schedule 08.05.2019
comment
Да, 1.4.1 был длинным после переименования, не должно быть причин для использования пути Sirupsen в вашем коде.   -  person JimB    schedule 08.05.2019


Ответы (1)


Как мне узнать источник этого старого модуля Sirupsen?

Используйте бета-версию Go 1.13 (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/[email protected]: 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 и sirupsen/logrus, - это импорт github.com/docker/docker или одного из других репозиториев докеров. Импорт репозиториев докеров немного сбивает с толку модули, в том числе потому, что:

  • Репо docker/docker не следует за semver.
  • There is a very old v1.13.1 semver tag on the docker/docker repo.
    • Even though it is a couple years old, it is still the "latest" semver tag on that repo, and hence that old version is picked by default by the go command if you don't ask for a more specific version.
    • Эта старая docker/docker версия импортирует старый и не неправильный верхний регистр Sirupsen/logrus, что может затем вызвать ошибку, указанную в вопросе выше.
  • Пакет клиента докера претерпел критические изменения после версии 1.13.1.
  • Обычно существует путаница относительно docker/docker и docker/engine репозиториев и того, какие пути импорта использовать.
  • В репозиториях Docker нет go.mod файлов.

Для репозитория docker/docker путь импорта остается github.com/docker/docker, но он должен исходить из github.com/docker/engine, поэтому часто рекомендуется, чтобы импортер докеров выполнял 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>

Проблема с докером # 39302 отслеживает попытки задокументировать, как импортировать репозитории докеров при использовании модулей.

person typical182    schedule 02.08.2019
comment
Я попытался сделать это с помощью docker / distribution, но получил следующее: replace github.com/distribution/distribution: version "v2.7.1" invalid: should be v0 or v1, not v2 - person mjaggard; 14.07.2021