【问题标题】:Python interpreter resolves imports, PyDev and nosetests don'tPython 解释器解析导入,PyDev 和鼻子测试不解析
【发布时间】:2013-05-29 17:40:02
【问题描述】:

我正在使用我在新库中编写的另一个库中的模块。 PyDev 和nosetests 无法解析我的新库中使用的导入,尽管Python 解释器能够这样做。我引用的库存储在我的配置文件站点包中,并且我重新配置了 PyDev 的 PYTHONPATH 只是为了确保该文件夹包含在路径中。是的。

问题如下:

我的导入:

import my_library
# Here Eclipse says "ID:E1101  Module 'my_library' has no 'MyClass' member"
print(my_library.MyClass)
# Here Eclipse shows the same error as above
class NewClass(my_library.MyClass):
    ...

不过,如果我在 Eclipse 终端或系统终端中执行该文件,则会打印以下内容:

<class 'my_library.my_class.MyClass'>

我有一些基于我正在重构的库的旧实现的测试,如果我在 PyDev 调试器中运行它们,它们都会以错误结束。 nosetests 也会返回错误,但如果我使用 python test.py 手动运行测试,测试就会运行。

这是鼻子测试的输出:

E......
======================================================================
ERROR: Failure: AttributeError ('module' object has no attribute 'MyClass')
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/me/.local/lib/python2.7/site-packages/nose-1.3.0-py2.7.egg/nose/loader.py", line 413, in loadTestsFromName
    addr.filename, addr.module)
  File "/home/me/.local/lib/python2.7/site-packages/nose-1.3.0-py2.7.egg/nose/importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/home/me/.local/lib/python2.7/site-packages/nose-1.3.0-py2.7.egg/nose/importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/home/me/development/eclipse/newLibrary/new_library/__init__.py", line 29, in <module>
    from .classes import User, DataPackage
  File "/home/me/development/eclipse/newLibrary/new_library/classes.py", line 37, in <module>
    from .metadata import MetaData
  File "/home/me/development/eclipse/newLibrary/new_library/metadata.py", line 13, in <module>
    print(my_library.MyClass)
AttributeError: 'module' object has no attribute 'MyClass'

----------------------------------------------------------------------
Ran 7 tests in 0.007s

FAILED (errors=1)

我的系统和 Eclipse 使用的 PYTHONPATH 似乎是一样的(至少我在 Eclipse 设置中看到包含我的包的 site-packages 文件夹),并且解释器也是一样的(Python 2.7)。

所以我看到 import 语句有效 - 至少在命令行中是这样。但在 Eclipse 内部却没有。我也尝试过引用另一个项目,或者取消引用它,都没有效果。包导入没有抱怨,但 Eclipse 不相信我该类存在。怎么回事?

【问题讨论】:

  • 请提供来自nosetests 的错误。另外,在终端上运行which python 的结果是什么?此路径是否与您的 Eclipse 环境和您的鼻子安装使用的 Python 的路径匹配(即,它们是否使用不同的 Python 解释器和库路径)?
  • 你好,欢迎来到import is not resolved in pydev。我什至去了reported a bug, complete with testcase。底线:如果运行良好,让 pydev 抱怨(我确实花了很长时间与此作斗争,otherpydev 错误报告)
  • 哦,好吧...这很糟糕:) 但至少这不是我的错。 PyDev 有一个新的错误跟踪器,我在那里找不到错误报告。你知道它是否被转移了吗?也许我只是找不到它,因为我现在不在电脑旁。
  • 我不认为它(它们)存在 - 无论如何,旧跟踪器中有许多未解决的错误 - 随时开始将它们移到那里 :) 顺便说一句,如果你希望用户添加 @user收到您的评论通知

标签: python import pydev


【解决方案1】:

这里的常见问题是“my_library”不在 PYTHONPATH 中。

请注意,要导入库,必须将其父文件夹添加到 PYTHONPATH。

即: 如果图书馆有:

/folder <-- this is the folder that should be added to the PYTHONPATH.
/folder/my_library
/folder/my_library/__init__.py

如果是项目中的文件夹,则该文件夹必须在项目属性中设置为源文件夹> PyDev - PYTHONPATH

如果它是您系统中的文件夹,则应将其添加到窗口 > 首选项 > PyDev > 解释器 - Python(如果它已经存在,只需点击“应用”以强制它重新扫描更改)。

【讨论】:

  • 如上所述,我的系统 PYTHONPATH 找到了库并正确执行了脚本。 site-packages 文件夹也列在我的 Eclipse Python 解释器首选项中。该结构看起来就像您在上面提到的那样 - 站点包,然后是 my_library,然后是 init.py.
  • 你能打印(my_library) 来检查它是否是你期望的模块吗?
  • 是的,正如我在问题中展示的那样,我不仅可以打印库,还可以打印我正在导入的类。
  • 你能发布输出吗? (即:在错误之前添加一个 print(my_library) 并将输出添加到您的问题中)
  • 输出一直在帖子里,你只要看就行了:)
猜你喜欢
  • 2018-05-09
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
相关资源
最近更新 更多