python sys.path.insert_sys.path.insert()&sys.path.append()

注: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的動態操作也是如此。

def AddSysPath(new_path):

""" AddSysPath(new_path):給Python的sys.path增加一個"目錄"

如果此目錄不存在或者已經在sys.path中了,則不操作

返回1表示成功,-1表示new_path不存在,0表示已經在sys.path中了

already on sys.path.

"""

import sys, os

# 避免加入一個不存在的目錄

if not os.path.exists(new_path): return -1

# 將路徑標准化。 Windows是大小寫不敏感的,所以若確定在

# Windows下,將其轉成小寫

new_path=os.path.abspath(new_path)

ifsys.platform== 'win32':

new_pathnew_path= new_path.lower( )

# 檢查當前所有的路徑

for x in sys.path:

x=os.path.abspath(x)

ifsys.platform== 'win32':

xx= x.lower( )

if new_path in (x, x + os.sep):

return 0

sys.path.append(new_path)

# 如果想讓new_path在sys.path處於最前

# 使用:sys.path.insert(0, new_path)

return 1

if _ _name__== '_ _main_ _':

# 測試,顯示用法

import sys

print 'Before:'

for x in sys.path: print x

ifsys.platform== 'win32':

print AddSysPath('c:\\Temp')

print AddSysPath('c:\\temp')

else:

print AddSysPath('/usr/lib/my_modules')

print 'After:'

for x in sys.path: print x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值