sys.path.insert()用法

注:sys.path模块是动态的修改系统路径

模块要处于Python搜索路径中的目录里才能被导入,但我们不喜欢维护一个永久性的大目录,因为其他所有的Python脚本和应用程序导入模块的时候性能都会被拖累。本节代码动态地在该路径中添加了一个"目录",当然前提是此目录存在而且此前不在sys.path中。

sys.path是个列表,所以在末尾添加目录是很容易的,用sys.path.append就行了。当这个append执行完之后,新目录即时起效,以后的每次import操作都可能会检查这个目录。如同解决方案所示,可以选择用sys.path.insert(0,…,这样新添加的目录会优先于其他目录被import检查。

即使sys.path中存在重复,或者一个不存在的目录被不小心添加进来,也没什么大不了,Python的import语句非常聪明,它会自己应付这类问题。但是,如果每次import时都发生这种错误(比如,重复的不成功搜索,操作系统提示的需要进一步处理的错误),我们会被迫付出一点小小的性能代价。为了避免这种无谓的开销,本节代码在向sys.path添加内容时非常谨慎,绝不加入不存在的目录或者重复的目录。程序向sys.path添加的目录只会在此程序的生命周期之内有效,其他所有的对sys.path的动态操作也是如此。

  1. def AddSysPath(new_path):  
  2.       """ AddSysPath(new_path):给Python的sys.path增加一个"目录"  
  3.       如果此目录不存在或者已经在sys.path中了,则不操作  
  4.       返回1表示成功,-1表示new_path不存在,0表示已经在sys.path中了  
  5.       already on sys.path.  
  6.       """  
  7.       import sys, os  
  8.       # 避免加入一个不存在的目录  
  9.       if not os.path.exists(new_path): return -1  
  10.       # 将路径标准化。 Windows是大小写不敏感的,所以若确定在  
  11.       # Windows下,将其转成小写  
  12.       new_path = os.path.abspath(new_path)  
  13.       if sys.platform == 'win32':  
  14.             new_pathnew_path = new_path.lower( )  
  15.       # 检查当前所有的路径  
  16.       for x in sys.path:  
  17.             x = os.path.abspath(x)  
  18.             if sys.platform == 'win32':  
  19.                    xx = x.lower( )  
  20.             if new_path in (x, x + os.sep):  
  21.                    return 0  
  22.       sys.path.append(new_path)  
  23.       # 如果想让new_path在sys.path处于最前  
  24.       # 使用:sys.path.insert(0, new_path)  
  25.       return 1  
  26. if _ _name_ _ == '_ _main_ _':  
  27.       # 测试,显示用法  
  28.       import sys  
  29.       print 'Before:'  
  30.       for x in sys.path: print x  
  31.       if sys.platform == 'win32':  
  32.               print AddSysPath('c:\\Temp')  
  33.               print AddSysPath('c:\\temp')  
  34.     else:  
  35.               print AddSysPath('/usr/lib/my_modules')  
  36.       print 'After:'  
  37.       for x in sys.path: print x 

  • 24
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Cche1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值