如何去除 py_library 导入中的文件夹名称?
How to strip folder names in py_library imports?
我在理解 bazel 的 python 导入目录时遇到问题。
给定这样一棵树:
.
├── WORKSPACE
├── python_lib_a/
│ ├── BUILD
│ └── src/
│ └── package1/
│ └── folder1/
│ └── some_file.py
└── python_binary_a/
├── BUILD
└── src/
└── package1/
└── folder2/
└── python_binary.py
python_binary.py
文件如何像这样导入 some_file.py
文件:
from package1.folder1.some_file import SomeClass
我是 Bazel 的新手,所以我的 google 查询可能是错误的。我找不到 removing/stripping 文件夹名称的任何示例。
如有必要,我愿意编写自定义规则。类似于在编译过程中更改文件夹的插件。
编辑:除了已接受的答案外,我还必须将其添加到库和二进制 src 文件夹中的 package1/__init__.py
文件中:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
可能有一种方法可以做到这一点,但肯定有效的方法是移动 BUILD
文件的位置
.
├── WORKSPACE
├── python_lib_a/
│ └── src/
│ ├── BUILD
│ └── package1/
│ └── folder1/
│ └── some_file.py
└── python_binary_a/
└── src/
├── BUILD
└── package1/
└── folder2/
└── python_binary.py
然后在 python_lib_a
中它会像下面一样从 //python_lib_a/src:package1
调用
py_library(
name = "package1",
srcs = glob(
["package1**/**/*.py"],
),
imports = ["."],
visibility = ["//visibility:public"],
)
然后在另一个做
py_library(
name = "package2",
srcs = glob(
["package1**/**/*.py"],
),
imports = ["."],
visibility = ["//visibility:public"],
deps = [ '//python_lib_a/src:package1']
)
我在理解 bazel 的 python 导入目录时遇到问题。 给定这样一棵树:
.
├── WORKSPACE
├── python_lib_a/
│ ├── BUILD
│ └── src/
│ └── package1/
│ └── folder1/
│ └── some_file.py
└── python_binary_a/
├── BUILD
└── src/
└── package1/
└── folder2/
└── python_binary.py
python_binary.py
文件如何像这样导入 some_file.py
文件:
from package1.folder1.some_file import SomeClass
我是 Bazel 的新手,所以我的 google 查询可能是错误的。我找不到 removing/stripping 文件夹名称的任何示例。 如有必要,我愿意编写自定义规则。类似于在编译过程中更改文件夹的插件。
编辑:除了已接受的答案外,我还必须将其添加到库和二进制 src 文件夹中的 package1/__init__.py
文件中:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
可能有一种方法可以做到这一点,但肯定有效的方法是移动 BUILD
文件的位置
.
├── WORKSPACE
├── python_lib_a/
│ └── src/
│ ├── BUILD
│ └── package1/
│ └── folder1/
│ └── some_file.py
└── python_binary_a/
└── src/
├── BUILD
└── package1/
└── folder2/
└── python_binary.py
然后在 python_lib_a
中它会像下面一样从 //python_lib_a/src:package1
py_library(
name = "package1",
srcs = glob(
["package1**/**/*.py"],
),
imports = ["."],
visibility = ["//visibility:public"],
)
然后在另一个做
py_library(
name = "package2",
srcs = glob(
["package1**/**/*.py"],
),
imports = ["."],
visibility = ["//visibility:public"],
deps = [ '//python_lib_a/src:package1']
)