Python Snakefood模块导入广义故障

时间:2015-03-07 01:40:46

标签: python python-2.7 python-import pythonpath

我想运行snakefood(基于AST的依赖图分析器;可以找到源代码here)。我的项目有一个包含几个级别的Python包的结构,如下所示:

myproject
 |code
  |Utils
   |AdaptedConfigParser
    Configs_Parser.py
    ...
 ...
 main.py

然而,当我开始在我的项目的根目录上运行snakefood时,它声称它找不到我导入的Python包中的模块:

$ sfood --internal --follow --ignore-unused ./PycharmProjects/myproject/ > ~/static_analysis.txt
WARNING     :     Line 9: Could not import module 'myproject.Utils.AdaptedConfigParser.Configs_parser'

我试图通过将.pth文件与项目根目录添加到lib/python2.7/site-packages

来解决这个问题。

现在,当我从任何地方激活虚拟环境调用python时,我可以执行以下操作:

$ python
Python 2.7.6rc1 (default, Jan 19 2014, 18:57:40) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import myproject.Utils.AdaptedConfigParser.Configs_parser
>>>

它运作得很好。

然而,当使用虚拟环境启动蛇食时,它仍会返回相同的错误。

$ sfood --internal --follow --ignore-unused ./PycharmProjects/myproject/ > ~/static_analysis.txt
WARNING     :     Line 9: Could not import module 'myproject.Utils.AdaptedConfigParser.Configs_parser'

此时我甚至不知道导入问题可能来自哪里。

除此之外,当--internal标志被删除时,即使是python builtin模块也无法导入,这对我没有任何意义:

WARNING     :     Line 80: Could not import module 'builtins'
WARNING     :     Line 190: Could not import module 'pyamg'

以前有人遇到过这样的问题吗?如果是的话,有没有办法绕过它?

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,因为__all__声明生成了我的案例中的警告。

e.g。

__all__ = ['abc',
           'aaa',
           ...
          ]

上面的代码给出了警告:

WARNING     :     Line xx: Could not import module 'abc'
WARNING     :     Line xx: Could not import module 'aaa'

我修改了ERROR_IMPORT中的警告常量snakefood\lib\python\find.py,以添加发生错误的文件的名称以及行号和模块名称。这样你就可以针对具体的文件和行号来解决问题。

希望这有帮助!