问: 假设我有这个脚本: export.bash #!...echo $VAR 有没有一种方法可以通过只执行 export.bash 而不 source 它获取 $VAR? 答: 不可以。 但是有几种可能的解决办法。...在调用 shell 的上下文中执行脚本: $ cat set-vars1.sh export FOO=BAR $ . set-vars1.sh $ echo $FOO BAR 另一种方法是在脚本中打印设置环境变量的命令...-f 指 shell 函数 -n 从每个(变量)名称中删除 export 属性 -p 显示所有导出变量和函数的列表 ---- 参考: stackoverflow question 16618071...help eval 相关阅读: 用和不用export定义变量的区别 在shell编程中$(cmd) 和 `cmd` 之间有什么区别 ----
:我在安装bazel的时候一直出现“Segmentation fault:11”的错误,google了很多解决方法后发现是gcc的安装版本问题,如果你是mac用户,下载了xcode,并不代表你安装了gcc...如果安装失败了,用下载好的bazel再输入“bazel install gcc”,下载完检测一下gcc -v,如果依然是"Segmentation fault:11"错误,恭喜你,遇到和我一样的错误了,...恭喜你,又犯了和我同样的错误:)这个错误是说测试文件太大了,不能一下子全部测试(我16g的内存还不够吗 = =),所以你可以跟我一样手动测试,以其中一个举例: 1 >>>bazel-bin/magenta...3.创建你的旋律数据集 和机器学习一样,我们得先输入一定的数据让它去训练,这里的训练数据可以自己下载喜欢的音乐,不过Magenta不能直接读取mp3文件,只能读取MIDI文件(mp3太大了,一个10M...模型训练的好坏直接决定最后得到的音乐的好听程度,所以最好等算法收敛后在进行测试。我测试的世界各文件中很多都像乱弹的。 2.这个项目刚开始不久,有一个论坛专门给大家交流学习的心得以及提问题,点这里。
:表示 C++ 工具链的集合 而我们知道规则(Rule)定义了 Bazel 对输入执行的一系列操作,以生成一组输出。...例如 cc_binary 规则可能: 输入(Inputs):获取一组 .cpp 文件 动作(Action):基于输入运行 g++ 输出(Output):返回一个可执行文件 从 Bazel 的角度来看,g...:将一个字符串写入文件 ctx.actions.expand_template :从模板文件中创建一个文件 因此我们可以通过创建一个运行脚本命令的 Action 来运行上面所述的打包命令,即使用 ctx.actions.run_shell...最后在实现自定义规则中将多个静态库合并为一个动态库示例中,这里有几个点我们需要注意下: 在实现我们中间文件的拷贝过程中,如果最后没有实现输出 output Action,那么中间文件也不会产生,这在我调试过程中带给了我一阵疑惑...其他的比如还可以编写测试规则(类名需以_test结尾)、actions.write(适合小文件生成)、actions.expand_template(用模板生成文件)、用 aspect 从依赖中搜集信息等等规则的具体用法
规则设计者可以利用它,例如使规则在其依赖项上设置隐式属性。 transition 表示跨依赖项边缘的配置转换。即可以实现读入一组构建设置,并输出一组构建设置。...使用 Starlark Configurations 可以让你: 定义项目自己的编译标志,而不再需要 --define 对于规则,可以实现默认的编译配置 不像传统的 --cpu 、--copt 、--compilation_mode...=(-c) 等方式,是 Bazel 版本内置,而用户自定义的编译设置可以在 .bzl 文件中实现,不需要重新编译 Bazel 源码就可以实现 我们最终实现: $ bazel build //my:binary...string_flag 构建设置规则在实际工程中我们也不需要自己去实现,可以通过 `bazel-skylib`[3] 加载:load("@bazel_skylib//rules:common_settings.bzl...同时 _today 属性绑定 :week 目标,从而在 date 规则实现中可以获得 _today 属性值。
前面我说过,CI 系统是一种远程执行代码的服务。虽然从传统上看,构建系统是在本地运行 (因此不是服务),但现代的构建系统(如 Bazel、Buck、Gradle) 完全不一样。...如果我用 Bazel 建立了一个构建系统,然后定义一个服务器端 Git 推送钩子,让远程服务器触发 Bazel 进行构建、运行测试并将结果发布到某处,那么这就变成了一个 CI 系统吗?我想是的!...有人会将现有的可扩展构建系统(如 Bazel、Buck 和 Gradle)中的节点转换为平台的计算任务,这样就可以实现构建系统和 CI 系统 (可能还有数据管道之类的东西) 的统一。...我愿景中的所有组件现在都以某种形式存在着。Bazel、Gradle Enterprise 和其他现代构建系统都有用于远程执行和缓存的 RPC。...定义 Starlark 方言,这样就可以像 Bazel 等构建工具中的原语一样定义 CI/ 发布任务。 迫使其他构建工具(如 Bazel)做出改进,缩短构建时间。
解决方案是让 Hadoop streaming 作业包的 Hadoop jar 不带版本字符串,这样提供的 Hadoop 依赖项在运行时总是在类路径中,而不管它运行在 Hadoop 2.7 或 2.10...为了解决这个问题(在2.10集群中使用 2.7 jar),我们决定将用户的 Bazel jar 从 Hadoop 库中解耦;也就是说,我们不再将 Hadoop jar 放在 fat user Bazel...Bazel java_binary 规则有一个名为 deploy_env 的参数,它的值是表示此二进制的部署环境的其他 java_binary 目标的列表。...在测试期间,我们花了很多精力来识别这些类型的情况,并修改用户的 bazel 规则,以显式地添加那些隐藏的依赖项。...将 Hadoop bazel targets 从 2.7 升级到 2.10 在将用户应用程序与 Hadoop Jars 解耦后,我们需要将 Hadoop bazel targets 从 2.7 升级到
最近公司给我们分配了2台虚拟机服务器用于强化学习训练,我们在虚拟环境中安装好了TensorFlow环境后,在import tensorflow时发现报了下面的错误: ?...于是我去Google搜索了下出现这个错误的原因,发现是因为我们服务器的CPU不支持AVX指令集导致的,而使用pip安装的TensorFlow需要依赖AVX指令集,为了确认我们的CPU是否真的不支持AVX...在构建TensorFlow之前,我们要先做两件事: 下载TensorFlow的源码 下载和安装Bazel构建工具 在下载TensorFlow源码如果网速比较好的话,可以直接使用下面的命令从...在官网中会告诉你,你可以安装在GitHub中可以是 tensorflow/configure.py 中指定的介于 _TF_MIN_BAZEL_VERSION 和 _TF_MAX_BAZEL_VERSION...是我自己定义的最终安装包输出的位置,结束后,我们可以cd到 /tmp/tensorflow_pkg目录中,查看里面的内容: ?
我在第一时间下载使用了这款应用,当那些熟悉的游戏背景音乐响起,仿佛又带我回到了多年前的游戏时光。虽然这些经典游戏在画面和声音上无法与现代游戏媲美,但它们出色的游戏性至今仍让人沉迷。...在玩这些精致而简洁的像素游戏时,我不禁思考,现在的游戏或应用是否变得过于庞大了。 新的硬件平台让我们可以在不担心效率的情况下尽情使用资源,开发者也逐渐习惯了对资源的大量消耗。...在这篇详尽的指南中,Brentley Jones 介绍了如何将 iOS 应用从 Xcode 迁移到 Bazel。...文章以 Mastodon iOS 项目作为实例,涵盖了从使用 swift_library 和 ios_application 等规则到利用远程缓存和执行优化构建性能的多个方面。...Leonardo Pugliese 的这篇文章探讨了 iOS 开发者在使用 Swift 中的枚举时常见的几个错误,包括映射值时缺乏凝聚力、懒惰的 Switch 和默认子句的误用,以及错误地假设自动原始值递增
有几种方法可以实现这些要求,如量化、权重剪枝或将大模型提炼成小模型。 在这个项目中,我使用了 TensorFlow 中的量化工具来进行模型压缩。...为了找到 ops 的完整列表,我首先使用 tf.train.write_graph 输出图的详细信息。...结果 图 3 展示了 app 的截图和示例。由于模型中没有语言模型,而且识别仅在字符级,因此句子中出现了一些拼写错误。...虽然没有经过严格的测试,但在量化之后,我确实发现准确率略有下降,以及整个系统对周围的噪声很敏感。 ? 图 3. App 中两个示例的截图。 下表所示推断时间是对 5 秒音频的 10 次测试的平均值。...有两件重要的事情可以让这个项目更进一步,也可以为社区提供额外的教程和演练,以便在边缘设备上部署一个现实语音识别系统。
本篇介绍何使用宏和规则扩展 Bazel 的构建语言。 在学习更高级的概念之前,先了解以下几个知识点: 了解 BUILD 和 .bzl 文件中使用的 Starlark 语言。...规则比宏更强大。它可以访问 Bazel 内部信息,并完全掌控将要处理的内容。例如,它可以将信息传递给其他规则。 如果您想重复使用简单的逻辑,请从宏开始。如果宏变得复杂,通常最好使其成为规则。...规则适用于高级用户,大多数用户永远都不需要编写规则;它们只会加载和调用现有规则。 BUILD 的三个阶段 加载阶段。规则实例化,将其添加到图表中。 分析阶段。...执行规则的代码(其 implementation 函数),并将操作实例化。一个操作描述了如何从一组输入生成一组输出,如“在 hello.c 上运行 gcc 和获取 hello.o”。...分析阶段接受由加载阶段生成的图并生成操作图。 执行阶段。需要至少一项输出时,系统才会执行操作。如果文件缺失,或者某个命令无法生成一条输出,则构建会失败。在此阶段可选运行测试。
最近公司给我们分配了2台虚拟机服务器用于强化学习训练,我们在虚拟环境中安装好了TensorFlow环境后,在import tensorflow时发现报了下面的错误: 于是我去Google搜索了下出现这个错误的原因...于是我按照官网https://www.tensorflow.org/install/source给出的步骤来尝试从源码自己编译和构建TensorFlow。...在构建TensorFlow之前,我们要先做两件事: 下载TensorFlow的源码 下载和安装Bazel构建工具 在下载TensorFlow源码如果网速比较好的话,可以直接使用下面的命令从GitHub...在官网中会告诉你,你可以安装在GitHub中可以是 tensorflow/configure.py 中指定的介于 _TF_MIN_BAZEL_VERSION 和 _TF_MAX_BAZEL_VERSION...是我自己定义的最终安装包输出的位置,结束后,我们可以cd到 /tmp/tensorflow_pkg目录中,查看里面的内容: 可以看到,我们最终的pip安装版本就已经完成,接下来我们就可以在命令行里输入下面的命令进行安装了
workspace需要包含的必要文件: WORKSPACE文件,用于指定当前文件夹就是一个Bazel的工作区。所以WORKSPACE文件总是存在于项目的根目录下。...每个工作空间目录都有一个名为的文本文件WORKSPACE,该文件可以为空,或者可以包含 对构建输出所需的外部依赖项的引用。 包含名为的文件 WORKSPACE的目录被视为工作空间的根。...可以看出bazel并不支持名为WORKSPACE.in的文件....BUILD文件 BUILD文件中包含了多个不同类型的bazel指令。 其中最重要的是编译规则(build rule),它告诉bazel怎么编译目标输出,是一个执行文件还是一个库。...BUILD文件中每一个编译规则被称为target,指向了一堆源文件和相关的依赖,一个target也可以指向其他target。
这些 APIs 不足以让所有项目都使用平台。Bazel 还必须淘汰旧的 APIs。这不是很容易就完成的任务,因为项目的所有语言、工具链、依赖项和 select() 都必须支持新的 APIs。...//tools/cpp:toolchain 3 Platform 方式 3.1 平台 3.1.1 概述 Bazel 可以在各种硬件、操作系统和系统配置上构建和测试代码,使用许多不同版本的构建工具,比如链接器和编译器...Bazel 认为平台可以扮演三个角色: Host(主机): Bazel 本身运行的平台 Execution(执行): 构建工具执行构建操作以产生中间和最终输出的平台,执行平台设置一般是固定的。...Target(目标): 最终输出驻留在其上并在其上执行的平台,比如可能在执行平台上交叉编译目标平台输出,则目标平台是多变的。...4 小结 从 Bazel 的平台应用我们可以看到它的强大在于大型、混合语言、多平台的应用,能够统一平台构建,这也是 Bazel 的核心特点。
最近,在研究 Gradle 和 Java 相关构建的实现,让我对不同编程语言的应用构建燃起了一点点的兴趣。...引子 3:可选的依赖管理(地狱) 关于依赖的管理槽点,我已经写过一系列的文章,诸如于:管理依赖的 11 个策略、依赖孪生:低成本的依赖安全方案。 单纯从构建这件事情上,对于依赖的管理是可有可无的。...工作空间是一个或者多个软件包的集成,它们可以共享依赖、输出目录配置等等。...工作区 工作空间是一个或者多个软件包的集成,它们可以共享依赖、输出目录配置等等。...仓库 这个概念的再提取是来源于 Bazel。仓库是一系列包的合集,我们可以将其视为团队的边界,从某种意义上可以看作是代码仓库。
有几种方法可以实现这些要求,如量化、权重剪枝或将大模型提炼成小模型。 在这个项目中,我使用了 TensorFlow 中的量化工具来进行模型压缩。...为了找到 ops 的完整列表,我首先使用 tf.train.write_graph 输出图的详细信息。...结果 图 3 展示了 app 的截图和示例。由于模型中没有语言模型,而且识别仅在字符级,因此句子中出现了一些拼写错误。...虽然没有经过严格的测试,但在量化之后,我确实发现准确率略有下降,以及整个系统对周围的噪声很敏感。 ? 图 3. App 中两个示例的截图。 下表所示推断时间是对 5 秒音频的 10 次测试的平均值。...有两件重要的事情可以让这个项目更进一步,也可以为社区提供额外的教程和演练,以便在边缘设备上部署一个现实语音识别系统。 提高语音识别性能:添加拼写校正的语言模型和噪声下采样模型,以降低周围噪声的影响。
它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU)、服务器、移动设备等等。...注:我也是初学者,想分享基础知识给大家学习,我也从零开始TF,希望和更多的朋友一起学习,谢谢您们的支持! 二进制安装 TensorFlow Python API 依赖 Python 2.7 版本....在 Linux 和 Mac 下最简单的安装方式, 是使用 pip 安装. 如果在安装过程中遇到错误, 请查阅 常见问题. 为了简化安装步骤, 建议使用 virtualenv, 教程见 这里....可以考虑将下面的命令 添加到~/.bash_profile 文件中, 这样每次登陆后自动生效....$ bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu# 大量的输出信息.
我:是啊!真的很方便,你不觉得吗? 某人:这是我听过的最可笑的事情。难道 FB 和 Google 不知道将所有代码放在一个存储库中是多么糟糕的主意吗?...简化组织的带来的一个好处是更容易浏览项目。我使用的 monorepos 让您基本上可以像在网络文件系统上一样导航,重新使用用于在项目中导航的语句。...从理论上讲,创建一个构建系统是可能的,它可以在没有 monorepo 的情况下轻松构建任何具有任何依赖关系的东西,但它需要更多的努力,足够的努力,我从未见过一个系统可以无缝地做到这一点。...如果我不得不等待 C 发布,然后是 B,然后我才能修复和部署 A,我可能还在等待。但由于所有内容都在一个 repo 中,我的同事可以进行更改并提交,然后我可以立即进行更改。...如果一切都由 git 版本链接,我想我可以做到这一点,但我的同事仍然必须进行两次提交。并且总是有选择一个版本并修复冲突的时候。
究竟该选择哪个工具,我觉得可以从如下几个方面来对比一下: 1、上手难度 因为Bazel采用了类似Python的语法,所以其学习曲线相比CMake要平缓一些。...说到底,编程规范的存在,主要就是可以让水平参差不齐的工程师们,可以在一起协作出风格较为一致的项目来。...我自己在开发中,觉得非常方便必须使用的新特性有: 智能指针 右值,以及C++14中右值得capture lambda, bind initialize list 想补充说一下的是auto,我自己不是特别喜欢这个...feature,也非常赞同google规范中的对auto的限制:仅当可以提高代码可读性时,使用auto 这里不由得就想扯起java 10中的var。...就我自己而言,我觉的单元测试的目的有以下几个: 确保功能的实现和预期一致 防止程序在重构的时候出问题 给模块的使用者,提供使用示例 值得一提的是,对于C++项目,除了功能性测试之外,你最好还能让你的单元测试通过一些自动化工具的检测
但是 Go 编译内置规则没有支持,不过好在 Bazel 支持规则扩展,可以自定义 Go 相关规则,包括可以实现如 go_binary、go_library、go_test等规则。...gazelle 的另一种方式就是直接和 Bazel 集成使用,作为一个外部规则导入使用,WORKSPACE 文件中:。...文件: # 根据 go.mod,将go_repository规则写入一个单独的宏文件并将其加载到 WORKSPACE 文件中 $ bazel run tools/cli:gazelle -- update-repos...Bazel Go 规则集,可以让我们很方便地管理 Go 工具链和外部库,而无需依赖于本地安装的库。...所以从 go build 到 bazel build 是否有必要,需要根据你的项目来决定。
但这个库中并不包含Envoy自身的源代码,因此这个库在构建时会从Github上下载Envoy源码进行联合编译。 编译工具 Envoy采用了Bazel进行构建。...Bazel定义构建的依赖关系和规则,并管理构建生成的临时文件及二进制文件,具体的编译工作是调用各个语言的编译工具如GCC, JAVAC等完成的。...target是一个构建规则(build rule)的实例,一般包含构建所需的源文件,构建目标的名称。rule还可以嵌套,一个rule的输出文件可以作为另一个rule的输入文件。...另外target还可以依赖外部Repository中的另一个target,这个外部Repository可以是文件系统上另一个文件夹下的项目,github的项目或者http下载的代码。...在执行//src/envoy:envoy这个target时,发现该target依赖这个外部repository,根据http_archive中的描述,从指定的url下载该依赖的源码,并进行编译。
领取专属 10元无门槛券
手把手带您无忧上云