Python模块搜索路径代码详解
简述
由于某些原因,在使用import时,Python找不到相应的模块。这时,解释器就会发牢骚-ImportError。
那么,Python如何知道在哪里搜索模块的路径呢?
模块搜索路径
当导入名为hello的模块时,解释器首先搜索具有该名称的内置模块。如果没有找到,将在变量sys.path给出的目录列表中搜索名为hello.py的文件。
sys.path从这些位置初始化:
包含输入脚本的目录(或当前目录,当没有指定文件时)
PYTHONPATH(目录名列表,与shell变量PATH语法相同)
与安装相关的默认值
>>>importsys >>>sys.path ['','/usr/local/lib/python35.zip','/usr/local/lib/python3.5','/usr/local/lib/python3.5/plat-linux', '/usr/local/lib/python3.5/lib-dynload','/usr/local/lib/python3.5/site-packages']
注意:''表示当前目录(当前脚本所在的路径)
例如,在/home/wang/workspace中创建一个名为hello.py的模块,内容如下:
print('Hello')
然后,试图加载该模块:
>>>importos >>> >>>os.getcwd()#获取当前目录 '/home/wang' >>> >>>importhello.py ... ImportError:Nomodulenamed'hello'
很遗憾,由于sys.path中没有包含/home/wang/workspace这个路径,所以找不到hello模块,从而引发ImportError。
添加模块搜索路径
为了解决上述问题,需要添加模块搜索路径,可以使用以下几种方式:
1.动态增加路径
临时生效,对于不经常使用的模块,这通常是最好的方式,因为不必用所有次要模块的路径来污染PYTHONPATH。
2.修改PYTHONPATH变量
永久生效,对于在许多程序中都使用的模块,可以采用这种方式。这将改变所有Python应用的搜索路径,因为启动Python时,它会读取这个变量,甚至不同版本的Python都会受影响。
3.增加.pth文件
永久生效,这是最简单的、也是推荐的方式。Python在遍历已知的库文件目录过程中,如果遇到.pth文件,便会将其中的路径加入到sys.path中,于是.pth中所指定的路径就可以被Python运行环境找到了。
动态增加路径
通过sys模块的append()方法在Python环境中增加搜索路径:
>>>importsys >>>sys.path.append('/home/wang/workspace')
现在,查看搜索路径:
>>>sys.path ['','/usr/local/lib/python35.zip','/usr/local/lib/python3.5','/usr/local/lib/python3.5/plat-linux', '/usr/local/lib/python3.5/lib-dynload','/usr/local/lib/python3.5/site-packages','/home/wang/workspace'] >>> >>>importhello Hello
可以看到,路径被成功添加进去了,再次执行导入可以正常使用。
修改PYTHONPATH变量
打开并编辑bashrc:
$vim~/.bashrc
将以下内容附加到文件末尾:
exportPYTHONPATH=$PYTHONPATH:/home/wang/workspace
不要忘记重新加载shell,方法是退出并重新启动,或者在命令行重新加载配置文件:
$source~/.bashrc#或者.~/.bashrc
增加.pth文件
在/usr/local/lib/python3.5/site-packages下添加一个扩展名为.pth的配置文件(例如:extras.pth),内容为要添加的路径:
/home/wang/workspace
总结
以上就是本文关于Python模块搜索路径代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。