python相对导入

时间:2012-06-02 16:12:24

标签: python import relative

我正在尝试在python中进行相对导入。但我无法理解语法,每次我在这里搜索它,我都无法得到答案:

这是我的文件夹结构:

Root
    libraries
        mylibrary
        __init__
    projects
        project
            myproject.py

我想使用相对路径导入'mylibrary',这样做的语法是什么?

3 个答案:

答案 0 :(得分:3)

您必须将目录添加到您的python路径。

import sys
sys.path.append("/libraries") 

但我认为将库放在需要它的项目的文件夹中或者只是将它们安装到sys.path中已有的标准位置之间可能会更好。

答案 1 :(得分:3)

我不认为可以使用简单的import语句来完成。我要做的是将库文件夹的相对路径追加到sys.path,如下所示:

import sys
sys.path.append('../../')
from libraries import mylibrary

请注意,仅当您从projects/project目录启动python解释器时,此方法才有效。

答案 2 :(得分:3)

相对进口存在令人遗憾的混淆源。当您第一次了解它们时,您认为它们允许您通常使用相对文件/目录路径来引用将要导入的单个文件。 (或者至少,我是这么认为的。)实际上,它们只允许您在包中使用相对路径。这意味着当需要从同一个包中导入其他模块时,包中的某些模块可以使用相对导入语法。

在您的示例中,myproject.py与mylibrary不在同一个包中,实际上不在任何包中,因此无法使用myproject.py中的相对导入。在这种情况下,相对进口不适用。

您可以采取一些措施来获得所需的效果。一种是将库放在系统site-packages目录的子目录中。另一种方法是将.PTH文件放在系统site-package目录中,这些.PTH文件包含存储库所在位置的路径。另一种方法是使用PYTHONPATH指向存储库的目录。