使用无包的相对路径

时间:2018-12-20 06:35:13

标签: python-3.x

关于python中的相对路径的主题已经发布了几个问题,并且看起来这仍然是一个相当混乱的主题,并且没有最后提及。我在https://github.com/wweiradio/pkg-relative-import

中找到了最具说明性的示例

但是,当我对这些文件进行了一些更改时,我再次收到一些错误消息。经过一些调试后,我想到了以下有效的文件和目录结构。 (在下面提到的层次结构中,我已经提到了每个文件中的导入,以及哪些导入有效,哪些无效。)

注意:(1)无论__init__.py文件是否存在,代码均有效。所以我删除了所有这些文件。 (2)提到的文件仅包含提到的导入行,也许包含一些打印语句,而没有其他内容。

我将代码运行为:

cd top_level; python3 start1.py --> this works
cd top_level/src; python3 start2.py --> this does not work, as expected

我从此练习中学到了以下教训:

(1)不允许在调用目录上或其外部的任何相对路径。

(2)任何其他导入都应该是显式相对的(例如.sub3,而不是sub3),   或绝对值(例如src.sub2.sub3)

(3)相对路径与包无关,也与__init__.py的存在与否无关。   例如,在下面的代码中,我已经删除了所有 init .py,它仍然有效

(4)当前目录为。,其父目录为..,其祖父母为...,等等

您能否确认这些课程是否正确?在使用相对路径时还需要记住其他一些因素吗?

目录结构:

- top_level/
    - top.py
    - start1.py --> import src.sub.relative
    - src/
        - parent.py
        - start2.py --> import sub.relative
        - sub/
            - relative.py --> from .. import parent
                              from ..sub2 import relative2
                              # these imports give error if start2.py is called
                              # this is understood, so we call only start1.py
        - sub2/
            - relative2.py --> import top
                               from .. import parent
                               #from sub3 import relative3 # --> doesnt work
                               from .sub3 import relative3 # --> works
                               from src.sub2.sub3 import relative3 # --> works
                               #import sub3.relative3 # --> doesnt work
                               import src.sub2.sub3.relative3 # --> works
            - sub3/
                - relative3.py --> import top
                                   from ... import parent

0 个答案:

没有答案