【问题标题】:python relative import [duplicate]python相对导入[重复]
【发布时间】:2012-06-07 12:00:46
【问题描述】:

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

这是我的文件夹结构:

Root
    libraries
        mylibrary
        __init__
    projects
        project
            myproject.py

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

【问题讨论】:

  • 你想从哪里导入mylibrarymyproject.py我猜。

标签: python import


【解决方案1】:

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

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

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

【讨论】:

  • 对不起,我刚开始学习 python,但我想在多个项目中轻松使用我的“库”,而不必每次创建项目时都复制/粘贴它们,而且,我没有想将它们放入 PYTHONPATH 因为当我需要重新分配它们时,我需要去 C:\python 并从那里提取。
  • 没问题。这很好,我同意如果您自己编写库并且必须修改它们,这可能是更好的选择。否则,我仍然倾向于安装它们。
【解决方案2】:

我认为这不能通过简单的import 语句来完成。我要做的是将库文件夹的相对路径附加到sys.path,如下所示:

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

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

【讨论】:

  • 那么,在没有复制/粘贴和没有 PYTHONPATH 的情况下,我该怎么做才能在多个项目中重用我的函数和类?
  • 那么我想您唯一的选择是将它们安装在标准位置。阅读有关 distutils 的信息,对于纯 python 包使用它非常简单。
【解决方案3】:

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

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

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

【讨论】:

  • 感谢您的信息,也许这解释了我遇到的错误。 ://
猜你喜欢
  • 2012-10-25
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 2013-09-16
  • 2013-05-14
  • 1970-01-01
  • 2012-02-25
相关资源
最近更新 更多