igraph报错cannot_import_name_Graph/module_has_no_attribute_Graph
前言
最近在学习使用Python的igraph包进行网络分析,在使用igraph.Graph创建图的过程中,总是报错“module has no attribute Graph”,开始以为是windows不行,换了Linux,发现Linux同样不行,最后发现了原因,就是因为我把要运行的代码文件命名为了igraph.py,导致Python解释器认为我的igraph.py是一个模块,igraph.py当然没有Graph模块了,所以会报错。经过这次这个教训,我决定复习下Python的模块机制
模块是程序
任何Python程序都可以作为模块导入。例如,你定义了一个hello.py文件,同时设置了环境变量,那么你就可以导入该模块。
|
|
注意:导入模块“只导入一次”,导入模块并不意味着在导入时执行某些操作,它们主要用于定义,比如变量、函数、类。只导入一次可以避免导入的无线循环。
模块用于定义
模块在第一次导入到程序中时被执行。它们保持自己的作用域,其中定义的类、函数、变量都成为了模块的特性。
在模块中定义函数
如我在a.py中定义了helllo函数,同时在b.py中定义了hello函数,我们来看一看调用的区别。
a.py
b.py
体会模块保持自己的作用域
|
|
在模块中增加测试代码
我们可以设置模块本身是作为程序运行还是导入到其他程序。
为此,我们可以使用Python中的变量name,在“主程序”(包括解释器的交互提示符在内)中,变量name的值是”main“,而在导入的模块中,这个值被设定为模块的名字。
|
|
让你的模块可用
导入模块,执行程序时,解释器在sys.path的路径列表中查找模块。有两种方式可以让你的模块被查找。
1.将模块放置在合适的位置,只需要找出Python解释器在哪里查找模块。可以将模块放到下面输出位置中。
2.在PYTHONPATH环境变量中包含模块所在目录。
3.临时解决方案:sys.pat.append(“/xxx”)