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

clj7thdc  于 5个月前  发布在  Python
关注(0)|答案(1)|浏览(47)

我有以下文件结构

.
├── bedrock
│   ├── BUILD
│   └── bedrock
│       ├── __init__.py
│       └── main.py
└── boilerplate
    ├── BUILD
    └── main.py

个字符

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


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


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

9avjhtql

9avjhtql1#

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

py_library(
  name = "main",
  srcs = ["bedrock/main.py"],
  visibility = ["//visibility:public"],
)

字符串
bedrock/bedrock/main.py

def bedrock_function():
  return "bedrock"


boilerplate/BUILD

py_binary(
  name = "main",
  srcs = ["main.py"],
  deps = ["//bedrock:main"],
)


boilerplate/main.py

from bedrock.bedrock import main

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

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

$ PYTHONPATH=. python boilerplate/main.py
bedrock

相关问题