我正在使用我在新库中编写的另一个库中的模块。 PyDev和nosetests无法解析我的新库中使用的导入,尽管Python解释器能够这样做。我正在引用的库存储在我的配置文件site-packages中,我重新配置了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不相信我的类存在。发生了什么事?
答案 0 :(得分:0)
这里通常的问题是'my_library'不在PYTHONPATH中。
请注意,对于要导入的库,必须将其父文件夹添加到PYTHONPATH。
即: 如果图书馆有:
/folder <-- this is the folder that should be added to the PYTHONPATH.
/folder/my_library
/folder/my_library/__init__.py
如果它是项目中的文件夹,则必须将该文件夹设置为项目属性中的源文件夹&gt; PyDev - PYTHONPATH
如果它是您系统中的文件夹,则应在窗口中添加&gt;偏好&gt; PyDev&gt;解释器 - Python(如果它已经存在,只需点击'apply'强制它重新扫描更改)。