multi-lang-build 0.2.10__py3-none-any.whl → 0.3.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@ from multi_lang_build.compiler.python import PythonCompiler
7
7
  from multi_lang_build.mirror.config import MirrorConfig, get_mirror_config
8
8
  from multi_lang_build.ide_register import register_skill
9
9
 
10
- __version__ = "0.2.10"
10
+ __version__ = "0.3.0"
11
11
  __all__ = [
12
12
  "BuildConfig",
13
13
  "BuildResult",
multi_lang_build/cli.py CHANGED
@@ -74,6 +74,7 @@ Supported languages:
74
74
  go_parser.add_argument("--no-mirror", dest="mirror", action="store_false", help="Enable/disable Go proxy mirror")
75
75
  go_parser.add_argument("--ldflags", type=str, help="Linker flags")
76
76
  go_parser.add_argument("--tags", type=str, help="Build tags (comma-separated)")
77
+ go_parser.add_argument("--target", type=str, help="Build target package (e.g., ./cmd/server)")
77
78
  go_parser.add_argument("--test", action="store_true", help="Run tests instead of building")
78
79
  go_parser.add_argument("--tidy", action="store_true", help="Run go mod tidy")
79
80
  go_parser.add_argument("--all", action="store_true", help="Build all packages")
@@ -228,6 +229,7 @@ Examples:
228
229
  result = compiler.build_binary(
229
230
  parsed_args.source_dir,
230
231
  parsed_args.output,
232
+ target=parsed_args.target,
231
233
  mirror_enabled=parsed_args.mirror,
232
234
  ldflags=parsed_args.ldflags,
233
235
  tags=tags,
@@ -11,6 +11,7 @@ from multi_lang_build.compiler.base import CompilerBase, BuildResult, CompilerIn
11
11
  from multi_lang_build.mirror.config import (
12
12
  apply_mirror_environment,
13
13
  DEFAULT_GO_MIRROR,
14
+ MIRROR_CONFIGS,
14
15
  )
15
16
  from multi_lang_build.compiler.go_support import (
16
17
  GoMirrorFailover,
@@ -157,6 +158,18 @@ class GoCompiler(CompilerBase):
157
158
  go_mod = source_dir / "go.mod"
158
159
  if go_mod.exists():
159
160
  logger.info("⬇️ 下载Go依赖...")
161
+
162
+ # 显示当前镜像配置
163
+ if mirror_enabled:
164
+ if self._mirror:
165
+ mirror_key = self._mirror
166
+ else:
167
+ mirror_key = "go_qiniu" # 默认使用第一个
168
+ mirror_info = MIRROR_CONFIGS.get(mirror_key, {})
169
+ mirror_name = mirror_info.get("name", mirror_key)
170
+ mirror_url = mirror_info.get("proxy", "default")
171
+ logger.info(f"🔗 Go代理: {mirror_name} ({mirror_url})")
172
+
160
173
  deps_result = self._execute_with_mirror_failover(
161
174
  [go_executable, "mod", "download"],
162
175
  source_dir, output_dir, env, stream_output,
@@ -167,12 +180,14 @@ class GoCompiler(CompilerBase):
167
180
  return deps_result
168
181
 
169
182
  # Build the project
170
- logger.info("🔨 开始构建...")
171
183
  build_args = [go_executable, "build", "-o", str(output_dir)]
172
184
 
173
185
  if extra_args:
174
186
  build_args.extend(extra_args)
175
187
 
188
+ logger.info("🔨 开始构建...")
189
+ logger.info(f"构建命令: {' '.join(build_args)}")
190
+
176
191
  if mirror_enabled and self._mirror is None:
177
192
  build_result = self._execute_with_mirror_failover(
178
193
  build_args, source_dir, output_dir, env, stream_output
@@ -58,6 +58,7 @@ class GoBinaryBuilder:
58
58
  if target:
59
59
  build_args.append(str(target))
60
60
 
61
+ logger.info(f"构建命令: {' '.join(build_args)}")
61
62
  result = run_build(build_args, source_dir, output_path.parent, env_copy)
62
63
  last_result = result
63
64
 
@@ -109,6 +110,7 @@ class GoBinaryBuilder:
109
110
  build_args.append(str(target))
110
111
 
111
112
  logger.info("🔨 开始构建...")
113
+ logger.info(f"构建命令: {' '.join(build_args)}")
112
114
  build_result = run_build(build_args, source_dir, output_path.parent, env)
113
115
 
114
116
  if build_result["success"]:
@@ -41,6 +41,7 @@ class GoModuleBuilder:
41
41
  env_copy["GOOS"], env_copy["GOARCH"] = platform.split("/")
42
42
 
43
43
  logger.info("🔨 开始构建...")
44
+ logger.info(f"构建命令: {' '.join(build_args)}")
44
45
  build_result = run_build(build_args, source_dir, output_dir, env_copy)
45
46
 
46
47
  if build_result["success"]:
@@ -68,8 +69,10 @@ class GoModuleBuilder:
68
69
  Returns:
69
70
  BuildResult with success status
70
71
  """
72
+ tidy_cmd = [go_executable, "mod", "tidy"]
71
73
  logger.info("📦 执行 go mod tidy...")
72
- tidy_result = run_build([go_executable, "mod", "tidy"], source_dir, source_dir, env)
74
+ logger.info(f"构建命令: {' '.join(tidy_cmd)}")
75
+ tidy_result = run_build(tidy_cmd, source_dir, source_dir, env)
73
76
 
74
77
  if tidy_result["success"]:
75
78
  logger.info("✅ 依赖整理完成")
@@ -49,6 +49,7 @@ class GoTester:
49
49
  test_args.append("./...")
50
50
 
51
51
  logger.info("🧪 开始运行测试...")
52
+ logger.info(f"构建命令: {' '.join(test_args)}")
52
53
 
53
54
  if run_build:
54
55
  result = run_build(test_args, source_dir, source_dir, env)
@@ -0,0 +1,59 @@
1
+ """Structured logging configuration using loguru.
2
+
3
+ Configure the global loguru logger with structured output.
4
+ Other modules can simply: from loguru import logger
5
+
6
+ Usage:
7
+ from loguru import logger
8
+ logger.info('message', key1=value1, key2=value2)
9
+ """
10
+
11
+ import sys
12
+
13
+ from loguru import logger
14
+
15
+ # Remove default handler
16
+ logger.remove()
17
+
18
+ # Custom format function for structured logging
19
+ def _format(record: "loguru._logger.Record") -> str:
20
+ """Format log record with structured fields as key=value."""
21
+ # Get caller info
22
+ file_path = record["file"].name
23
+ short_file = file_path.split("/")[-1] if "/" in file_path else file_path
24
+ line = record["line"]
25
+ func = record["function"]
26
+
27
+ # Build message
28
+ message = record["message"]
29
+
30
+ # Format extra fields as key=value
31
+ extra = record.get("extra", {})
32
+ parts = []
33
+ for key, value in extra.items():
34
+ if isinstance(value, str) and (" " in value or "=" in value):
35
+ parts.append(f'{key}="{value}"')
36
+ elif value is None:
37
+ parts.append(f"{key}=null")
38
+ elif isinstance(value, bool):
39
+ parts.append(f"{key}={'true' if value else 'false'}")
40
+ else:
41
+ parts.append(f"{key}={value}")
42
+
43
+ fields_str = f" {' '.join(parts)}" if parts else ""
44
+
45
+ # Write directly to stdout to bypass loguru's colorizer
46
+ sys.stdout.write(f"[{short_file}:{line} {func}] {message}{fields_str}\n")
47
+ sys.stdout.flush()
48
+
49
+ # Return empty string to suppress loguru's own output
50
+ return ""
51
+
52
+
53
+ # Add configured handler with our custom format
54
+ logger.add(
55
+ sys.stdout,
56
+ format=_format,
57
+ level="INFO",
58
+ colorize=False,
59
+ )
@@ -53,7 +53,7 @@ You can use the `multi-lang-build` tool to compile projects:
53
53
  multi-lang-build go ./src --output ./bin/app --mirror
54
54
 
55
55
  # Build with specific target (multi-entry support)
56
- multi-lang-build go ./src --output ./bin/server --target cmd/server/main.go
56
+ multi-lang-build go ./src --output ./bin/server --target ./cmd/server
57
57
 
58
58
  # Build Python project
59
59
  multi-lang-build python ./src --output ./dist --mirror
@@ -31,7 +31,7 @@ skills:
31
31
  multi-lang-build:
32
32
  name: "Multi-Lang Build"
33
33
  description: "Multi-language automated build tool with mirror acceleration"
34
- version: "0.2.0"
34
+ version: "0.3.0"
35
35
 
36
36
  commands:
37
37
  build-go:
@@ -45,7 +45,7 @@ def register_opencode(project_level: bool = True) -> bool:
45
45
  },
46
46
  "examples": [
47
47
  "multi-lang-build go ./src --output ./bin/app --mirror",
48
- "multi-lang-build go ./src --output ./bin/server --target cmd/server/main.go",
48
+ "multi-lang-build go ./src --output ./bin/server --target ./cmd/server",
49
49
  "multi-lang-build python ./src --output ./dist --mirror",
50
50
  "multi-lang-build pnpm ./src --output ./dist --mirror",
51
51
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multi-lang-build
3
- Version: 0.2.10
3
+ Version: 0.3.1
4
4
  Summary: Multi-language automated build tool with domestic mirror acceleration support
5
5
  Project-URL: Homepage, https://github.com/example/multi-lang-build
6
6
  Project-URL: Repository, https://github.com/example/multi-lang-build
@@ -177,35 +177,41 @@ compiler.build(
177
177
 
178
178
  | IDE | 命令 | 说明 |
179
179
  |-----|------|------|
180
- | 🤖 **Claude Code** | `multi-lang-build register` | 默认,AI 助手原生支持 |
181
- | 💠 **OpenCode** | `multi-lang-build register opencode` | 智能代码助手集成 |
182
- | 🔷 **Trae** | `multi-lang-build register trae` | 字节跳动 AI IDE |
183
- | 🎯 **CodeBuddy** | `multi-lang-build register codebuddy` | 代码伙伴插件 |
180
+ | 🤖 **Claude Code** | `multi-lang-register claude` | 默认,AI 助手原生支持 |
181
+ | 💠 **OpenCode** | `multi-lang-register opencode` | 智能代码助手集成 |
182
+ | 🔷 **Trae** | `multi-lang-register trae` | 字节跳动 AI IDE |
183
+ | 🎯 **CodeBuddy** | `multi-lang-register codebuddy` | 代码伙伴插件 |
184
184
 
185
185
  ### 注册 Claude Code(默认)
186
186
 
187
187
  ```bash
188
- # 默认注册到项目级(.claude/multi-lang-build.md)
189
- multi-lang-build register
188
+ # 使用独立命令
189
+ multi-lang-register
190
190
 
191
- # 或使用完整命令
192
- multi-lang-build register claude
191
+ # 或指定 IDE
192
+ multi-lang-register claude
193
+ multi-lang-register opencode
194
+ multi-lang-register trae
195
+ multi-lang-register codebuddy
193
196
 
194
197
  # 注册到全局配置
195
- multi-lang-build register claude --global
198
+ multi-lang-register claude --global
196
199
  ```
197
200
 
198
201
  ### 注册其他 IDE
199
202
 
200
203
  ```bash
201
204
  # 注册到 OpenCode
202
- multi-lang-build register opencode
205
+ multi-lang-register opencode
203
206
 
204
207
  # 注册到 Trae
205
- multi-lang-build register trae
208
+ multi-lang-register trae
206
209
 
207
210
  # 注册到 CodeBuddy
208
- multi-lang-build register codebuddy
211
+ multi-lang-register codebuddy
212
+
213
+ # 注册所有 IDE
214
+ multi-lang-register all
209
215
  ```
210
216
 
211
217
  ### 注册功能说明
@@ -214,10 +220,10 @@ multi-lang-build register codebuddy
214
220
 
215
221
  | IDE | 命令 | 项目级配置 | 全局配置 |
216
222
  |-----|------|-----------|---------|
217
- | 🤖 **Claude Code** | `multi-lang-build register` | `.claude/multi-lang-build.md` | `~/.claude/CLAUDE.md` |
218
- | 💠 **OpenCode** | `multi-lang-build register opencode` | `.opencode/skills.json` | `~/.config/opencode/skills.json` |
219
- | 🔷 **Trae** | `multi-lang-build register trae` | `.trae/skills.json` | `~/.trae/skills.json` |
220
- | 🎯 **CodeBuddy** | `multi-lang-build register codebuddy` | `.codebuddy/skills.yaml` | `~/.codebuddy/skills.yaml` |
223
+ | 🤖 **Claude Code** | `multi-lang-register claude` | `.claude/multi-lang-build.md` | `~/.claude/CLAUDE.md` |
224
+ | 💠 **OpenCode** | `multi-lang-register opencode` | `.opencode/skills.json` | `~/.config/opencode/skills.json` |
225
+ | 🔷 **Trae** | `multi-lang-register trae` | `.trae/skills.json` | `~/.trae/skills.json` |
226
+ | 🎯 **CodeBuddy** | `multi-lang-register codebuddy` | `.codebuddy/skills.yaml` | `~/.codebuddy/skills.yaml` |
221
227
 
222
228
  注册后,IDE 将自动识别项目类型并提供智能构建建议。
223
229
 
@@ -253,24 +259,26 @@ pip install multi-lang-build[dev]
253
259
 
254
260
  ```bash
255
261
  # Go 项目构建(默认实时输出日志)
256
- go-build ./myproject --output ./bin/app --target server.go --mirror
262
+ multi-lang-build go ./myproject --output ./bin/app --mirror
263
+
264
+ # 指定入口文件编译(cmd 结构)
265
+ multi-lang-build go ./myproject --output ./bin/server --target ./cmd/server
257
266
 
258
267
  # 禁用实时输出
259
- go-build ./myproject --output ./bin/app --no-stream
268
+ multi-lang-build go ./myproject --output ./bin/app --no-stream
260
269
 
261
270
  # Python 项目构建
262
- python-build ./myproject --output ./dist --mirror
271
+ multi-lang-build python ./myproject --output ./dist --mirror
263
272
 
264
273
  # PNPM 项目构建
265
- pnpm-build ./myproject --output ./dist --mirror
274
+ multi-lang-build pnpm ./myproject --output ./dist --mirror
266
275
 
267
- # 注册到 IDE(默认 Claude Code)
268
- multi-lang-build register
269
-
270
- # 注册到指定 IDE
271
- multi-lang-build register opencode
272
- multi-lang-build register trae
273
- multi-lang-build register codebuddy
276
+ # 注册到 IDE(独立命令)
277
+ multi-lang-register # 默认 Claude Code
278
+ multi-lang-register opencode
279
+ multi-lang-register trae
280
+ multi-lang-register codebuddy
281
+ multi-lang-register all # 注册所有 IDE
274
282
 
275
283
  # 镜像配置
276
284
  multi-lang-build mirror list # 列出可用镜像
@@ -400,6 +408,43 @@ for pkg in ["ui", "utils", "app"]:
400
408
 
401
409
  ---
402
410
 
411
+ ## 📋 更新日志
412
+
413
+ ### v0.3.1 (2026-02-03)
414
+
415
+ **🔧 重构**
416
+ - 使用 loguru 替换 ColorInfo 实现结构化日志
417
+ - 日志格式: `[file:line function] message key=value`
418
+ - 支持调用者位置追踪
419
+
420
+ ### v0.3.0 (2026-02-03)
421
+
422
+ **✨ 新功能**
423
+ - 添加 `--target` CLI 参数,支持指定入口文件编译
424
+ - 构建时自动打印完整构建命令,方便排查问题
425
+ - 下载依赖时显示当前镜像配置信息
426
+ - `go mod tidy` 命令日志输出
427
+
428
+ **🔧 优化**
429
+ - 镜像故障转移机制改进
430
+ - 日志输出更加清晰
431
+
432
+ ### v0.2.9 (2026-01-XX)
433
+
434
+ **✨ 新功能**
435
+ - Go 镜像自动故障转移(goproxy.io → goproxy.cn → goproxy.vip.cn)
436
+ - Go 编译器模块化重构
437
+ - 添加进度日志
438
+
439
+ ### v0.2.0 (2025-09-XX)
440
+
441
+ **✨ 首次发布**
442
+ - 支持 Go、Python、PNPM 多语言构建
443
+ - 镜像加速功能
444
+ - IDE 集成注册
445
+
446
+ ---
447
+
403
448
  <p align="center">
404
449
  用 ❤️ 构建 | 让多语言开发更简单
405
450
  </p>
@@ -1,21 +1,22 @@
1
- multi_lang_build/__init__.py,sha256=HFLjChxI1v6o36HTscv8X8p0WQMEuwXHVt9FzYZE4x8,1795
2
- multi_lang_build/cli.py,sha256=SSj7f_auQ0qmjiY65aU0xEIW56w0xgA-8PgI9ICj04I,13100
1
+ multi_lang_build/__init__.py,sha256=_3D4R7_1Y452wsSbtcqKetK3pUFVJvW3JWSH-CNZCFc,1794
2
+ multi_lang_build/cli.py,sha256=v1xn2qfpj47n7rZQMg-Xiz8Tnu9aUEz--u9x4chH5vs,13246
3
3
  multi_lang_build/ide_register.py,sha256=lz345IOs9S6-neh7t_6txJhz7XLypEiNzwvSl3ouVo8,3028
4
+ multi_lang_build/log.py,sha256=HM_0uGq8pGj_-9wR30iw1iGH1G0OvIJQb3x_AhKrRAE,1651
4
5
  multi_lang_build/py.typed,sha256=c8jtFarMovqA5DdwhEzKPH4WrX85xaoiWilIlvuc6KU,84
5
6
  multi_lang_build/types.py,sha256=iCyz_6KmEBU4xwpCtfJnpzXoiSsmOcOKOhzHJVx8Z4Q,1043
6
7
  multi_lang_build/compiler/__init__.py,sha256=7cfE3n7ATXZ8JabON_Qg0npxd7EY2jEU4tC6FxDupIs,493
7
8
  multi_lang_build/compiler/base.py,sha256=crtDW9bthfV-FSpp96O2Hi0DrViNqcIt4TjAVK2lPXE,9391
8
- multi_lang_build/compiler/go_compiler.py,sha256=HPNp6UQD_umjlV5ewqsYmRET3rfegqFaHOtOWy_cCIM,13234
9
+ multi_lang_build/compiler/go_compiler.py,sha256=3KrHEz8HtE0Gnck-8gtFMAIrUP5FOO15K7LqG0GyFCc,13830
9
10
  multi_lang_build/compiler/pnpm.py,sha256=0dwcf5LoPdzqlpkjEBVy8YNZNjd6CnUTOxIdonckwjo,10463
10
11
  multi_lang_build/compiler/python.py,sha256=P-4ydqoUerMFkupVISu7j_KGSJVsZfmxeAZzCy36WWo,11797
11
12
  multi_lang_build/compiler/go_support/__init__.py,sha256=UGsWdG_RdbjgLGYtvbftjzLjPwHF9tmb-pmezKvEWMQ,675
12
- multi_lang_build/compiler/go_support/binary.py,sha256=XGt9jzRaCl2tykaHy8iqF1KrLHa3eW4hiolDozMMtaI,3698
13
+ multi_lang_build/compiler/go_support/binary.py,sha256=bG452wvisoWlQDroBDNNXrR1SIHEMO1e0IQHsa-mF9I,3824
13
14
  multi_lang_build/compiler/go_support/builder.py,sha256=NtavFLgEtZ5zFvygvudzylJ5AMo2wuRxCMJCDxHTmQA,6531
14
15
  multi_lang_build/compiler/go_support/cleaner.py,sha256=UW5YQhzJtgypBpG0BQusmguxl7C8T3TLxlt58Krgvmg,1046
15
16
  multi_lang_build/compiler/go_support/env.py,sha256=GPXFkePQb2QHaiiJuLXXVnSE9VtHjjPiZx82oYuVx3k,1270
16
17
  multi_lang_build/compiler/go_support/mirror.py,sha256=BWT8mhLEshSVCFZa2D0amIvR366ZSXJCvP8djAqP11Q,3786
17
- multi_lang_build/compiler/go_support/module.py,sha256=5ubgiMJu0P8UeiutV3tIIifO30IBhbktDfJB4orWgvk,2204
18
- multi_lang_build/compiler/go_support/tester.py,sha256=r6DVL4EtNUYQB_Jm84MGmZ1sDl9QsV6JqanZwHj-XyM,5428
18
+ multi_lang_build/compiler/go_support/module.py,sha256=T-Jf_UebLR0MQ13yRZo7dugd_8bhk3QUBUPAWq39B4w,2352
19
+ multi_lang_build/compiler/go_support/tester.py,sha256=QHZzBe2zEN57MOO7G62wfuUhzLPeA8D0Fbquub8hQpk,5488
19
20
  multi_lang_build/compiler/pnpm_support/__init__.py,sha256=_bPoy8XWGykiijpC8xwGMfJK3H4iBzIOYlcZUStwb9A,225
20
21
  multi_lang_build/compiler/pnpm_support/executor.py,sha256=w52GN4fCGqbt90yEPq_LyaaWcGhoRbhudI_RJ38OkZY,4352
21
22
  multi_lang_build/compiler/pnpm_support/project.py,sha256=JPHAxK0z1FOtNsAgJUUlp70wPGP4bq5pSB5o0FK44Co,1531
@@ -29,12 +30,12 @@ multi_lang_build/mirror/__init__.py,sha256=RrZOQ83bxImAR275zeAUKyyCgwqdGt5xH8tF_
29
30
  multi_lang_build/mirror/cli.py,sha256=qv6RI6izxUIsfMCIDOtTK3avcNSJpAaUF3NPiK1W49A,9820
30
31
  multi_lang_build/mirror/config.py,sha256=ZQo9upkE29vw0QFuBT6sYw85DhOhHQg59RSYu-OcdQg,9067
31
32
  multi_lang_build/register/support/__init__.py,sha256=Hg5oKJn5KhJ-qikzpDtFf0CO9WVnMvJVhExf20-PC10,443
32
- multi_lang_build/register/support/claude.py,sha256=YgXdU0--1wr6QIDL6rojY_zLKnlb-nu6fDqvpKywzd4,3370
33
- multi_lang_build/register/support/codebuddy.py,sha256=6ZPj0bs6erkSvok5lHueLbqxjIOCqml98zJoVTuBKj4,3356
34
- multi_lang_build/register/support/opencode.py,sha256=zGrTREyCNUX8RZgTbv9p2KV0ZcQjB68jZQqIClFbD1k,2394
33
+ multi_lang_build/register/support/claude.py,sha256=Ku4ZkVVEh6--ALlGKDG8brTWPKXpJsj0gp36pbqVFr8,3364
34
+ multi_lang_build/register/support/codebuddy.py,sha256=b0omRs2BcxeTdKho0aQ3bbjuzU6-WrcQFyCIuf-grQo,3356
35
+ multi_lang_build/register/support/opencode.py,sha256=B9x_cfJcWDjNLDiWZsN5Hj1TqlMGG9Zh0oeey8l16X8,2388
35
36
  multi_lang_build/register/support/trae.py,sha256=nkiQRCWp8in3cI3BLuWHMMLzQwiQQv3crxAU06sXOuk,2527
36
- multi_lang_build-0.2.10.dist-info/METADATA,sha256=1UZ3bhhQbW4AXA8fR-M6nF6ZU29gl18OIRuFEa_EucA,10074
37
- multi_lang_build-0.2.10.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
38
- multi_lang_build-0.2.10.dist-info/entry_points.txt,sha256=0vd5maQH5aZoqnpbr2Yr_IWB_-ncWX1rO3jGBCW3pHY,319
39
- multi_lang_build-0.2.10.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
40
- multi_lang_build-0.2.10.dist-info/RECORD,,
37
+ multi_lang_build-0.3.1.dist-info/METADATA,sha256=rPFzE7_v5AbrnUbS9zGWcknq_jOJX_c0RtM49cVGdpU,11122
38
+ multi_lang_build-0.3.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
39
+ multi_lang_build-0.3.1.dist-info/entry_points.txt,sha256=0vd5maQH5aZoqnpbr2Yr_IWB_-ncWX1rO3jGBCW3pHY,319
40
+ multi_lang_build-0.3.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
41
+ multi_lang_build-0.3.1.dist-info/RECORD,,