【问题标题】:How do I make relative importing work in Python using Eclipse with PyDev?如何使用 Eclipse 和 PyDev 在 Python 中进行相对导入工作?
【发布时间】:2023-03-20 03:00:02
【问题描述】:

所以我正在开发一个 Python 项目,该项目在我之前的 SVN 存储库中。我第一次拉的时候,结构有点奇怪,因为它类似于:

Proj\
    src\
    tags\
    trunk\

然后一切都在 src\ 里面是 python 模块文件,除了 src\ 原来只是一个逻辑文件夹,里面没有整体包。项目中的任何地方都没有 __init__.py 。所以我想至少重组它,这样我就可以通过我的项目使用相对导入。我也想设置它,让它看起来更像这样。

Proj\
    src\
        model\
        controller\
        view\
        test\
    tags\
    trunk\

但是,我尝试设置它,无论我做什么,当我必须遍历包时,它都无法解决相对导入问题。我在每个级别包中放置了一个 __init__.py 文件,包括一个位于 src\ 文件夹中的文件,所有这些文件都定义了 __all__ 。但是,当我尝试在我的 test\ 包中进行单元测试并执行导入时说:

from ..model.foo import Foo

尝试从位于模型包内的模块 foo.py 导入 Foo 类,它无法解析。以防万一这是单元测试的问题,我还尝试了控制器包中的一个模块,该模块依赖于模型包中的一个类,反之亦然。他们都没有工作。我该如何解决这个问题?

【问题讨论】:

  • 当你说它没有解析时,你的意思是你在运行模块时出错了或者你在PyDev中出错了?
  • 我现在假设这是运行模块的错误,但我不想排除可能是某种 PyDev 配置问题的可能性。
  • 你能发布你遇到的异常吗?

标签: python eclipse svn pydev


【解决方案1】:

您是否已将根文件夹添加到系统路径中?

import sys
sys.path.append(<place the Proj dir here>)

然后你可以按如下方式导入:

from src.model.somefile import Something

如果你不知道 Proj 的绝对路径,你总是可以使用诸如

之类的组合
os.path.dirname(os.getcwd())

【讨论】:

  • 我想你的意思是os.getcwd()
猜你喜欢
  • 1970-01-01
  • 2010-12-26
  • 2021-10-19
  • 2013-01-30
  • 2010-12-27
  • 2018-06-26
  • 2010-12-07
相关资源
最近更新 更多