【问题标题】:Python and the importsPython 和导入
【发布时间】:2021-10-14 22:14:55
【问题描述】:

我有一个使用 grpc 的 python 项目。 我用python -m grpc_tools.protoc -I "pathToMyProtoFile" --python_out=. --grpc_python_out=. "pathToMyProtoFile\module.proto"创建文件

我希望所有 grpc-stuff 都在 python 包中。所以我创建了一个子文件夹“my_package_folder”并在其中添加了一个空的__init__.py

我的问题:如何访问以及将生成的module_pb2.pymodule_pb2_grpc.py 放置在何处。

如果我将它们放在我的应用程序的根文件夹中,我将无法使用 from .. import module_pb2_grpc“尝试相对导入超出顶级包”从我的包中访问它们

如果我将它们放入我的“my_package_folder”中,则 2 个生成的文件不会相互找到。 (import module_pb2 as module__pb2 in "module_pb2_grpc.py")

python 中的这种导入机制非常混乱……我不知道从哪里开始解决这个问题。

我的文件夹结构只是主项目文件夹和所有 grpc 东西的子文件夹“my_package_folder”。

【问题讨论】:

  • 你能添加你当前的文件夹结构吗?

标签: python package


【解决方案1】:

假设您有这样的文件夹结构。我只是以一个文件为例。

├── module_pb2_grpc.py
├── my_package_folder
│   ├── __init__.py

然后要解析attempted relative import beyond top-level package,可以加这个。

init.py

import os
import sys
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(SCRIPT_DIR))
from module_pb2_grpc import *

【讨论】:

  • 此解决方案有效。我永远不会猜到这是标准方式。
猜你喜欢
  • 2023-01-26
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2014-03-29
  • 2014-02-02
  • 1970-01-01
相关资源
最近更新 更多