Python 模块搜索路径

简述

我们都知道,使用python时,无论是使用第三方的模块(库),还是自己开发的模块,都需要先在代码中使用import来引入。对于初学者,经常会遇到的一个问题是在使用 import 时,Python 找不到相应的模块,于是编译器报 - ImportError错误。

那么,Python 如何知道在哪里搜索模块的路径呢?

当import某个模块时,解释器首先搜索具有该名称的内置模块,如果没有找到,将在变量 sys.path 给出的目录列表中搜索名为 模块名.py 的文件。sys.path 包含了一下几个目录:

  • 输入脚本的当前目录;
  • PYTHONPATH环境变量;
  • python安装时的系统目录;
>>> import sys
>>> sys.path
['', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages']

注:其中''表示的就是当前目录。

设置模块路径

先看一个例子,在/root/ws目录下建一个hello.py文件,内容如下:

def test():
    print('hello')
    return

然后我们在/root目录下,使用python命令行引入该模块:

>>> import sys
>>> sys.path
['', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages']
>>> 
>>> import os
>>> os.getcwd()
'/root'
>>> import hello
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named hello

可以看到,当前目录和sys.path中都不包含/root/ws ,所以会报importError错误。

为了解决上述问题,我们可以通过一下三种方法来解决。

1、使用sys.path.append 临时动态添加模块的路径:

>>> sys.path.append('/root/ws')
>>> sys.path
['', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages', '/root/ws']
>>>
>>> import hello
>>> hello.test()
hello

可以看到,/root/ws路径被动态的临时添加到了sys.path中了。

2、修改PYTHONPATH环境变量:

vim ~/.bashrc

#添加
export PYTHONPATH=$PYTHONPATH:/root/ws
#生效
source ~/.bashrc

#python代码中引入hello模块
$ python
Python 2.7.5 (default, Sep 15 2016, 22:37:39) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/root', '/root/ws', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages']
>>> import hello
>>> hello.test()
hello

可以看到,/root/ws路径被动态的永久添加到了sys.path中了。

3、使用.pth文件:

在/usr/lib/python2.7/site-packages 下添加一个扩展名为 .pth 的配置文件(例如:test.pth),内容为要添加的路径:

/root/ws

这样,就可以在python中引入hello模块了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值