繁体   English   中英

来自同一包的python相对导入失败

[英]python relative import from same package fails

我正在从事一个涉及流行的aiortc/aioquic github 包的项目。 位于src/aioquic/buffer.py有一个导入语句:

from ._buffer import Buffer, BufferReadError, BufferWriteError  # noqa

此行用于导入 C/stub 模块 _buffer.c / _buffer.pyi 。 当从根目录运行在示例目录中找到的示例时,此导入行将起作用,但是当尝试从同一目录在 Docker 容器中运行时,此导入失败,并且从 /src 目录导入时,导入失败。 我已经尝试阅读有关 python 相对导入的其他几个问题,但对我来说似乎没有任何意义。

要重现该问题:

  1. 在src目录下打开python
  2. 从 aioquic 进口关于(作品)
  3. 从 aioquic 导入缓冲区(失败)
from aioquic import buffer
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/aioquic/src/aioquic/buffer.py", line 1, in <module>
    from ._buffer import Buffer, BufferReadError, BufferWriteError  # noqa
ModuleNotFoundError: No module named 'aioquic._buffer'

我不明白为什么示例 http3_client 和 http3_server 可以工作,但是当尝试直接导入它时它会失败。 我以为我大致了解如何使用 python 导入,但显然不是。 什么会导致从一个目录运行时同一行工作但从另一个目录运行时失败? PYTHONPATH 有什么神奇之处吗? 我希望比我更聪明的人能解释为什么这会失败。 [编辑,最重要的是如何解决这个问题,以便无论用户从哪里运行 python,导入都可以正常工作。 我尝试了几种不同的组合,但似乎都不起作用。]提前致谢。

我发现出了什么问题。 存根/C 模块必须先构建到 .pyd 文件中,然后才能导入。 这是由

pip install -e .

在父目录上

PYTHONPATH 有什么神奇之处吗?

是的。

通常. 点(当前工作目录)将出现在导出的 env var 中,所以你从哪里开始很重要。

请注意确保在交互和 Docker 运行期间使用相同的 env var 设置和相同的pwd

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM