Python:在导入语句中无法识别父包的名称

维克多·奥杜亚德

我了解有关此主题的问题很多,但是我看到的大多数答案都描述了解决复杂的问题的方法,在我看来,这些问题应该很简单。这是我的目录结构:

Mapper/
    LICENSE.txt
    README.txt
    setup.py
    bin/
        # nothing here, yet
    mapper/
        __init__.py
        process.py
        where.py
        # ...
        binconvert/
            __init__.py
            tocsv.py
            todict.py
            # ...

我想在我所有本地开发的模块上使用绝对路径,以减少混乱并避免此处提到的错误

但是,我对此有多个问题。当我运行process.py,其中我import tocsv.py喜欢这样,

from mapper.binconvert import tocsv

我得到错误: ModuleNotFoundError: No module named 'mapper'

我知道我可以做到from binconvert import tocsv,但是就像我说的那样,我试图让我所有本地开发的模块导入都使用绝对路径。

tocsv.py尝试where.py像这样导入时收到与以前相同的错误

 from mapper import where

对于这一点,我相信可以使用点点相对的方法import,但再次,我想使所有路径保持绝对。毕竟,我相信,根据这个Python文档的推移,我应该能够做到这一点:

将包结构化为子包时(与示例中的声音包一样),可以使用绝对导入来引用同级包的子模块。例如,如果模块sound.filters.vocoder需要使用中的echo模块sound.effects package,则可以使用from sound.effects import echo

sound/                          Top-level package
      __init__.py               Initialize the sound package
      formats/                  Subpackage for file format conversions
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
     effects/                  Subpackage for sound effects
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
     filters/                  Subpackage for filters
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...
塞德里克·朱利安

执行时,process.py您已经位于mapper包中。Python将遍历sys.path查找中定义的所有路径以找到模块,在这种情况下,该模块仅由组成["standard python path", "Mapper/mapper"]

在这种情况下,python不会在这些目录中找到名为mapper的模块(您已经在mapper模块中了)。

为您提供的解决方案:

  1. 使用表示法:(from .binconvert import tocsv符合PEP 328
  2. 从1目录向上移动,然后process.py从该Mapper目录启动和启动
  3. 在启动之前process.py通过添加Mapper路径来更改PYTHONPATH环境变量

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章