4

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

这是我的文件夹结构:

Root
    libraries
        mylibrary
        __init__
    projects
        project
            myproject.py

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

4

3 回答 3

3

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

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

但我认为最好将库放在需要它的项目的文件夹中,或者将它们安装到 sys.path 中已经存在的标准位置之一。

于 2012-06-02T16:20:27.917 回答
3

我不认为它可以用一个简单的import声明来完成。我要做的是将相对路径附加到您的库文件夹中,sys.path如下所示:

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

请注意,这仅在您从projects/project目录启动 python 解释器时才有效。

于 2012-06-02T16:20:35.827 回答
3

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

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

你可以做几件事来获得你想要的效果。一种是将您的库放在系统站点包目录的子目录中。另一种是将 .PTH 文件放在系统站点包目录中,这些 .PTH 文件包含存储库的位置的路径。另一种方法是使用 PYTHONPATH 指向存储库的目录。

于 2012-06-02T18:25:33.027 回答