我想运行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'
以前有人遇到过这样的问题吗?如果是的话,有没有办法绕过它?
答案 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
,以添加发生错误的文件的名称以及行号和模块名称。这样你就可以针对具体的文件和行号来解决问题。
希望这有帮助!