不清楚如何从另一个目标中定义的模块导入(python bazel)

clj7thdc  于 2024-01-05  发布在  Python
关注(0)|答案(1)|浏览(151)

我有以下文件结构

  1. .
  2. ├── bedrock
  3. ├── BUILD
  4. └── bedrock
  5. ├── __init__.py
  6. └── main.py
  7. └── boilerplate
  8. ├── BUILD
  9. └── main.py

个字符

  1. # bedrock/BUILD
  2. package(default_visibility = ["//visibility:public"])
  3. py_library(
  4. name = "main",
  5. srcs = glob(["**/*.py"]),
  6. )


  1. # bedrock/bedrock/main.py
  2. def some_method():
  3. return "some_value"


如何在boilerplate/main.py中访问some_method???
Bazel Python文档(实际上,任何一种文档)都非常糟糕!

9avjhtql

9avjhtql1#

它通常是from bedrock.bedrock import main
需要注意的是,srcs = ["main.py","//bedrock:main"]通常是不正确的,目标通常不依赖于其他包的源代码。
范例:
bedrock/BUILD

  1. py_library(
  2. name = "main",
  3. srcs = ["bedrock/main.py"],
  4. visibility = ["//visibility:public"],
  5. )

字符串
bedrock/bedrock/main.py

  1. def bedrock_function():
  2. return "bedrock"


boilerplate/BUILD

  1. py_binary(
  2. name = "main",
  3. srcs = ["main.py"],
  4. deps = ["//bedrock:main"],
  5. )


boilerplate/main.py

  1. from bedrock.bedrock import main
  2. print(main.bedrock_function())
  1. $ bazel run //boilerplate:main
  2. INFO: Analyzed target //boilerplate:main (72 packages loaded, 597 targets configured).
  3. INFO: Found 1 target...
  4. Target //boilerplate:main up-to-date:
  5. bazel-bin/boilerplate/main
  6. INFO: Elapsed time: 0.272s, Critical Path: 0.00s
  7. INFO: 6 processes: 6 internal.
  8. INFO: Build completed successfully, 6 total actions
  9. INFO: Running command line: bazel-bin/boilerplate/main
  10. bedrock

这与在工作区根目录下运行boilerplate/main.py相同,其中PYTHONPATH设置为当前目录:

  1. $ PYTHONPATH=. python boilerplate/main.py
  2. bedrock

展开查看全部

相关问题