如何处理 Go 包中嵌套的“vendor”目录?

2024-02-09

我正在编写一个应用程序并导入一些包B。这个包有vendor目录,其中又包含包C。我也想用那个包C直接在我的应用程序中。

所以我决定使用glide包管理器。它同时下载B and C into myapp/vendor目录,但保留myapp/vendor/B/vendor/C里面。因此,当我构建我的应用程序时,它使用两个不同版本的 C 构建(也使用myapp/vendor/C).

如何避免这种情况?

1)要么有一个包管理器可以处理这个问题吗?govend似乎与它的--prune争论,但它不尊重这些版本C包。

2)或者,如何制作glide正确处理嵌套vendor目录?

Edit

我的例子是https://github.com/orloffm/flat。它用cat以及 - 间接 -toy包。cat有一些旧版本 of toy已出售并提交到存储库中。我愿意glide create && glide install并最终得到这样的结果:

.
├── flat.go
├── glide.lock
├── glide.yaml
└── vendor
    └── github.com
        └── orloffm
            ├── cat
            │   ├── cat.go
            │   ├── vendor
            │   │   └── github.com
            │   │       └── orloffm
            │   │           └── toy
            │   │               └── toy.go
            │   └── vendor.yml
            └── toy
                └── toy.go

我不想嵌套vendor目录与toy.


我能够安装并运行你的flat通过进行以下更改来计划(还向您发送了 PRhttps://github.com/orloffm/flat/pull/1 https://github.com/orloffm/flat/pull/1):

1) flat.go 需要导入“github.com/orloffm/toy”,因为new(toy.RubberToy)- 否则无法编译

2) add glide.yaml将“cat”和“toy”库列为依赖项的文件:

package: github.com/orloffm/flat
import:
- package: github.com/orloffm/cat
- package: github.com/orloffm/toy

3) run glide install --strip-vcs --strip-vendor(或等效的快捷方式glide install -s -v) 安装包并删除嵌套vendor/目录(我正在使用 glide 版本 0.11.0-dev 安装go get -u github.com/Masterminds/glide; glide install --help显示了--strip-vendor选项)。

4) GOBIN=$PWD go install && ./flat 产生

Cat pushes the toy.
The toy makes a very loud noise.

我认为最好的是not包括vendor目录到你的图书馆- 这会使事情变得混乱,并使图书馆用户的生活变得更加困难(例如,需要记住使用其他选项来glide)。让这些图书馆的“客户”——package main包 - 要么提供所有依赖项(包括传递依赖项),要么在配置中指定它们,例如glide.yaml并让工具(滑动)正确获取并安装它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 Go 包中嵌套的“vendor”目录? 的相关文章

随机推荐

  • pyEphem 'sublat' 和 'sublong' 是在地心还是大地测量中给出的?

    文档说 如果给 pyEpehm 一个 TLE 和一个时间 它将返回以下内容 但是 我无法将返回的 sublat 和 sublon 转换为 ECEF XYZ 并返回 LLA 坐标进行验证 当我转换回来时 经度会被保留 但对于不同的测试 纬度会
  • Gradle Build 停留在生成调试源

    当我尝试构建任务 android generateDebugSources 时 Gradle 陷入困境 我让它运行了几个小时但没有成功构建 我已经在 Android Studio 1 0 0 0 8 1 Gradle 版本 2 1 1 1
  • 用户表单列表框显示一定范围内的值

    我正在尝试在 Excel 中创建一个用户窗体 其中有一个组合框 并且根据所选值 一系列单元格中的值将显示在用户窗体上的列表框中 到目前为止我有这个 Private Sub UserForm Initialize With ComboBox1
  • 从 MYSQL 中的索引号获取工作日名称

    我有一个表 其中存储 0 6 作为工作日值 我想显示工作日名称 例如 如果值为0 它将显示Sunday 如果值为1 它将显示Monday 同样地 是否有内置的 MySQL 函数可以从索引中获取日期名称 提前致谢 正如 Aliminator提
  • 虚拟属性和质量分配

    开发商 我无法理解接下来的情况 例如我有模型 class Pg City lt ActiveRecord Base belongs to country virtual accessors attr accessor population
  • numpy 初学者:使用 numpy.savetxt 编写数组

    我有一个 numpy 直方图 我想将其输出为制表符分隔的文本文件 我的代码如下 targethist np histogram targetlist bins ilist print targethist np savetxt ChrI d
  • cv::Mat 在 Visual C++ Express 2010 中给出错误

    我有 opencv2 1 并在 64 位计算机上使用 Visual C 2010 Express 进行编码 我之前没有遇到问题 我可以使用其他代码 但是下面的简单代码给出了错误 cvMatExample exe 中 0x571365af m
  • 动态规划:城市遍历

    我遇到了这个问题 有两个人 有 n 个城市的有序序列 并且每对城市之间的距离是给定的 您必须将城市划分为两个子序列 不一定是连续的 使得人 A 访问第一个子序列中的所有城市 按顺序 人 B 访问第二个子序列中的所有城市 按顺序 并且使得A
  • 2D 几何库:LGPL 替代 CGAL? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 CGAL 似乎可以满足我需要的一切 并且可以为我即将进行的项目做更多的事情 它可以从弧线段创建多边形并对其运行布尔运算 它已经有了空间排序
  • 如何保持 /*!与 UglifyJS2 的评论?

    默认行为寻找 license or preserve 但很多插件和库仍在使用 用于许可评论块 我该如何使用UglifyJS2 https github com mishoo UglifyJS2 usage保留以以下内容开头的评论 See h
  • 从另一个 Python 脚本运行 Python 脚本时处理异常

    我正在从另一个 python 脚本运行一个 python 脚本 我想知道如何从父 python 脚本中捕获异常 我的父 python 脚本调用另一个 python 脚本 n 次 最终 被调用的脚本将退出并出现 ValueError 异常 我
  • ie7 内联块的替代方案

    对于我的网站 我使用内联块属性 它适用于 mozilla 和 ie8 但在 ie7 中显示为块元素 我怎样才能把它设置正确 看看这个 http foohack com 2007 11 cross browser support for in
  • 无法初始化 Log4j - SLF4JLoggerContextFactory

    我有一个使用 log4j2 运行的 jetty web 应用程序 它没有记录任何内容 并且启动时出现以下错误 错误 StatusLogger LogManager 返回了 org apache logging slf4j SLF4JLogg
  • numpy 从索引列表创建 2D 掩码 [+ 然后从掩码数组中绘制]

    我有一个二维值数组 需要先屏蔽该数组的某些元素 索引取自约 100k 元组对的列表 然后再从剩余元素中抽取随机样本而不进行替换 我需要既快速 高效 希望避免 for 循环 又具有较小内存占用的东西 因为实际上主数组约为 20000 x 20
  • 更改文本区域字段中的字体和字体大小

    使用以下代码示例
  • String.Replace 不替换撇号

    我试图用字符串替换撇号 由于某种原因 该方法只是在字符串中找不到撇号 这是似乎不起作用的 URL news 2012 march cameron s crackdown on whiplash why the minimum speed r
  • Criteriabuilder之类的,如何长时间做到这一点?

    我尝试使用 Criteriabuilder 中的 like 方法来获取基于模式 10 的所有记录 我想要获取 ID 为 101 10002 1003 1000 等的记录 我用过这个代码 Predicate p cb like r
  • 求解受限于给出非负解的时滞微分方程 (DDE) 系统

    在 MATLAB 中 ode45 http www mathworks com help techdoc ref ode45 html有一个参数叫做NonNegative http www mathworks com help techdo
  • Grep 在日期范围内创建的所有文件中

    我使用的是 Ubuntu 操作系统 我想在 2012 年 5 月 28 日到 2012 年 5 月 30 日范围内创建的所有日志文件中 grep 一个单词 例如 XYZ 我怎么做 这与 Banthar 的解决方案略有不同 但它适用于find
  • 如何处理 Go 包中嵌套的“vendor”目录?

    我正在编写一个应用程序并导入一些包B 这个包有vendor目录 其中又包含包C 我也想用那个包C直接在我的应用程序中 所以我决定使用glide包管理器 它同时下载B and C into myapp vendor目录 但保留myapp ve