【问题标题】:python subpackage import from neighbour subpackage从邻居子包导入python子包
【发布时间】:2016-02-02 14:54:41
【问题描述】:

考虑以下层次结构

MusicEditor (package)
        Converters (subpackage)
            ...
        Transformations (subpackage)
            ...
        Utility (subpackage)
            ...

将实用程序子包中的文件/模块导入转换器子包中的文件的正确方法是什么?

例如将 Utility/string.py 导入到 Converters/wav.py 文件中

我该怎么做呢?


编辑以回应伊斯梅尔·因凡特

以下是否正确?

假设 MusicEditor 位于 /usr/something/MusicEditor。然后我会编辑python路径如下?

PYTHONPATH = PYTHONPATH + /usr/something/

然后我会将初始化文件添加到每个目录,如下所示:

MusicEditor (package)
        __init__.py
        Converters (subpackage)
            __init__.py
            ...
        Transformations (subpackage)
            __init__.py
            ...
        Utility (subpackage)
            __init__.py
            ...

然后要将实用程序中的某些内容包含到位于转换器中的文件中,我会简单地去:

(MusicEditor/Converters/wav.py)

import MusicEditor.Utility.string

这是正确的吗?但我也可以使用以下相对路径

(MusicEditor/Converters/wav.py)

import ..Utility.string

是吗?

【问题讨论】:

    标签: python import module package packages


    【解决方案1】:

    您必须在每个目录中放置一个__init__.py 空文件。这样,你的目录就会变成包。

    之后,您必须设置 PYTHONPATH 变量。此变量必须指向 MusicEditor 的父目录。通过这个变量,Python 解释器可以访问你的包。

    【讨论】:

    • 我已经调整了我原来的问题,如果我错了,你会看看它并进行任何必要的更改,更正吗?因为我不完全确定你的意思,因为我是一个菜鸟。谢谢@Ismael Infante
    • 设置 PYTHONPATH 变量,export PYTHONPATH=${PYTHONPATH};/usr/something。要在 wav.py 中导入字符串模块,请使用以下导入行:from MusicEditor.Utility import string。并且,调用字符串模块的任何函数:string.function_name().
    • 对于 3.3+ 版本,由于命名空间包,我不能完全省略 __init__.py 吗?
    • 我正在运行 python 2.7。我对python 3的新特性知之甚少。但似乎可以省略__init__.pywhat's new python 3.3.
    猜你喜欢
    • 2017-10-07
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多