我查看了 PyDev 5.8.0 的源代码(LiClipse 似乎是封闭源代码,但 pydev 的东西——我假设它处理所有与 Python 相关的东西——是开源的)。
在那里,有pydevd.py
模块,如果安装get_fullname()
正确找到:ruamel.yaml
Python 3.6.2 (default, Jul 17 2017, 14:33:45)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkgutil
>>> loader = pkgutil.get_loader('ruamel.yaml')
>>> def get_fullname(self, mod_name):
... if IS_PY3K:
... import pkgutil
... else:
... from _pydev_imps import _pydev_pkgutil_old as pkgutil
... try:
... loader = pkgutil.get_loader(mod_name)
... except:
... return None
... if loader is not None:
... for attr in ("get_filename", "_get_filename"):
... meth = getattr(loader, attr, None)
... if meth is not None:
... return meth(mod_name)
... return None
...
>>> IS_PY3K=True
>>> get_fullname(None, 'ruamel.yaml')
'/home/venv/tmp-d2e4bd3600c863b7/lib/python3.6/site-packages/ruamel/yaml/__init__.py'
(因为self
没有被引用,这可能应该被删除和装饰@staticmethod
)。
我搜索了资源Unresolved import
并Unused import
查看是否有其他类似的功能,但无法直接找到任何东西。由于导入将起作用,即使此消息显示,但看起来 LiClipse 也使用其他一些(不兼容的)方式来查找导入。
ruamel.yaml
是一个基于命名空间的包(即有 200 多个其他以 开头的包,ruamel.
其中一些也在 PyPI 上),这可能会导致问题。这也是你必须使用pip
安装的原因。
我已通过电子邮件向 Fabio Zadrozny(作者)发送了一份关于此问题的问题报告,并提供了我的帮助以帮助调查此问题。