Python中Nomodulenamed解决⽅法
有时候运⾏Python程序,如python bob.py会出现报错No module named '×××',这是因为import ×××时发⽣了错误。该如何解决呢?下⾯分两种情况分析:
(1)如果'×××'是⼀些python包,⽐如说numpy、pandas等,这时候在终端输⼊pip install ×××命令安装相应的包即可
python默认安装路径(2)如果'×××'是⾮python的包, ⽐如说⾃⼰写了个alice.py⽂件,然后在bob.py的⽂件⾥要调⽤a,即import alice或者from alice import,这时候如果报错No module named '×××'的话,是因为系统不到alice.py这个⽂件。
解决⽅法:为python解释器指定搜索路径,即把alice的路径添加到环境变量⾥。可以在bob.py⽂件的开始加⼊以下代码,并使得alice.py在root_path路径下
root_path = os.path.abspath(__file__)
root_path = '/'.join(root_path.split('/')[:-2])
sys.path.append(root_path)
下⾯来简单解释⼀下,当执⾏import ×××操作时,默认情况下python解析器会搜索当前⽬录、已安装的内置模块和第三⽅模块,搜索路径存放在sys模块的path中,sys.path是⼀个列表,如下图所⽰。如果要import的×××不在以下列表就会报错。
所以,我们需要sys.path.append(alice⽂件所在的⽗路径或者⽗路径的⽗路径,我们定义为root_path)
那么如何得到root_path呢?
⼀种⽅法是root_path="直接写相应的路径",这⾥的路径⼀般写整个项⽬⽂件的路径
另外⼀种⽅法如下
# STEP 1:先得到⽂件的绝对路径,⽐如本⽂中在bob.py⽂件中加⼊下⾯的代码即可得到bob.py的绝对路径“/home/codes/research/bob.py”
root_path = os.path.abspath(__file__)
# STEP 2:根据bob.py和alice.py路径的关系,得到能够包含alice.py的路径,⼀般直接写项⽬路径
root_path = '/'.join(root_path.split('/')[:-2])
上⾯的代码等价于下⾯的写法
root_path = os.path.dirname(os.path.dirname(abs_path)) # ⽗路径的⽗路径
什么?您说您⽤Pycharm?哦!那我告诉你另外⼀个解决No module named '×××'的办法,和之前介绍的⽅法是⼀样的功能。
如下图,即mask directory as Sources Root,这样就再也不⽤担⼼import⾮python包报错了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论