新聞中心
site —— 指定域的配置鉤子
源代碼: Lib/site.py

我們提供的服務(wù)有:網(wǎng)站制作、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、靜樂ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的靜樂網(wǎng)站制作公司
這個(gè)模塊將在初始化時(shí)被自動(dòng)導(dǎo)入。 此自動(dòng)導(dǎo)入可以通過使用解釋器的 -S 選項(xiàng)來屏蔽。
導(dǎo)入此模塊將會(huì)附加域特定的路徑到模塊搜索路徑并且添加一些內(nèi)建對(duì)象,除非使用了 -S 選項(xiàng)。 那樣的話,模塊可以被安全地導(dǎo)入,而不會(huì)對(duì)模塊搜索路徑和內(nèi)建對(duì)象有自動(dòng)的修改或添加。要明確地觸發(fā)通常域特定的添加,調(diào)用函數(shù) site.main()。
在 3.3 版更改: 在之前即便使用了 -S,導(dǎo)入此模塊仍然會(huì)觸發(fā)路徑操縱。
它會(huì)從頭部和尾部構(gòu)建至多四個(gè)目錄作為起點(diǎn)。 對(duì)于頭部,它會(huì)使用 sys.prefix 和 sys.exec_prefix;空的頭部會(huì)被跳過。 對(duì)于尾部,它會(huì)使用空字符串然后是 lib/site-packages (在 Windows 上) 或 lib/python*X.Y*/site-packages (在 Unix 和 macOS 上)。 對(duì)于每個(gè)不同的頭-尾組合,它會(huì)查看其是否指向現(xiàn)有的目錄,如果是的話,則將其添加到 sys.path 并且檢查新添加目錄中的配置文件。
在 3.5 版更改: 對(duì) “site-python” 目錄的支持已被移除。
如果名為 “pyvenv.cfg” 的文件存在于 sys.executable 之上的一個(gè)目錄中,則 sys.prefix 和 sys.exec_prefix 將被設(shè)置為該目錄,并且還會(huì)檢查 site-packages ( sys.base_prefix 和 sys.base_exec_prefix 始終是 Python 安裝的 “真實(shí)” 前綴)。 如果 “pyvenv.cfg” (引導(dǎo)程序配置文件)包含設(shè)置為非 “true”(不區(qū)分大小寫)的 “include-system-site-packages” 鍵,則不會(huì)在系統(tǒng)級(jí)前綴中搜索 site-packages;反之則會(huì)。
一個(gè)路徑配置文件是具有 *name*.pth 命名格式的文件,并且存在上面提到的四個(gè)目錄之一中;它的內(nèi)容是要添加到 sys.path 中的額外項(xiàng)目(每行一個(gè))。不存在的項(xiàng)目不會(huì)添加到 sys.path,并且不會(huì)檢查項(xiàng)目指向的是目錄還是文件。項(xiàng)目不會(huì)被添加到 sys.path 超過一次??招泻陀?# 起始的行會(huì)被跳過。以 import 開始的行(跟著空格或 TAB)會(huì)被執(zhí)行。
備注
每次啟動(dòng) Python,在 .pth 文件中的可執(zhí)行行都將會(huì)被運(yùn)行,而不管特定的模塊實(shí)際上是否需要被使用。 因此,其影響應(yīng)降至最低??蓤?zhí)行行的主要預(yù)期目的是使相關(guān)模塊可導(dǎo)入(加載第三方導(dǎo)入鉤子,調(diào)整 PATH 等)。如果它發(fā)生了,任何其他的初始化都應(yīng)當(dāng)在模塊實(shí)際導(dǎo)入之前完成。將代碼塊限制為一行是一種有意采取的措施,不鼓勵(lì)在此處放置更復(fù)雜的內(nèi)容。
例如,假設(shè) sys.prefix 和 sys.exec_prefix 已經(jīng)被設(shè)置為 /usr/local。 Python X.Y 的庫之后被安裝為 /usr/local/lib/python*X.Y*。假設(shè)有一個(gè)擁有三個(gè)孫目錄 foo, bar 和 spam 的子目錄 /usr/local/lib/python*X.Y*/site-packages,并且有兩個(gè)路徑配置文件 foot.pth 和 bar.pth。假定 foo.pth 內(nèi)容如下:
# foo package configurationfoobarbletch
并且 bar.pth 包含:
# bar package configurationbar
則下面特定版目錄將以如下順序被添加到 sys.path。
/usr/local/lib/pythonX.Y/site-packages/bar/usr/local/lib/pythonX.Y/site-packages/foo
請(qǐng)注意 bletch 已被省略因?yàn)樗⒉淮嬖冢?code>bar 目前在 foo 目錄之前因?yàn)?bar.pth 按字母順序排在 foo.pth 之前;而 spam 已被省略因?yàn)樗趦蓚€(gè)路徑配置文件中都未被提及。
在這些路徑操作之后,會(huì)嘗試導(dǎo)入一個(gè)名為 sitecustomize 的模塊,它可以執(zhí)行任意站點(diǎn)專屬的定制。 它通常是由系統(tǒng)管理員在 site-packages 目錄下創(chuàng)建的。 如此此導(dǎo)入失敗并引發(fā) ImportError 或其子類異常,并且異常的 name 屬性等于 'sitecustomize',則它會(huì)被靜默地忽略。 如果 Python 是在沒有可用輸出流的情況下啟動(dòng)的,例如在 Windows 上使用 pythonw.exe (它默認(rèn)被用于啟動(dòng) start IDLE),則來自 sitecustomize 的輸出嘗試會(huì)被忽略。 任何其他異常都會(huì)導(dǎo)致靜默且可能令人迷惑不解的進(jìn)程失敗。
在此之后,會(huì)嘗試導(dǎo)入一個(gè)名為 usercustomize 的模塊,它可以執(zhí)行任意用戶專屬的定制,如果 ENABLE_USER_SITE 為真值的話。 這個(gè)文件應(yīng)該在用戶的 site-packages 目錄中創(chuàng)建(見下文),該目錄是 sys.path 的組成部分,除非被 -s 所禁用。 如果此導(dǎo)入失敗并引發(fā) ImportError 或者其子類異常,并且異常的 name 屬性等于 'usercustomize',它會(huì)被靜默地忽略。
請(qǐng)注意對(duì)于某些非 Unix 系統(tǒng)來說,sys.prefix 和 sys.exec_prefix 均為空值,并且路徑操作會(huì)被跳過;但是仍然會(huì)嘗試導(dǎo)入 sitecustomize 和 usercustomize。
Readline 配置
在支持 readline 的系統(tǒng)上,這個(gè)模塊也將導(dǎo)入并配置 rlcompleter 模塊,如果 Python 是以 交互模式 啟動(dòng)并且不帶 -S 選項(xiàng)的話。 默認(rèn)的行為是啟用 tab 鍵補(bǔ)全并使用 ~/.python_history 作為歷史存檔文件。 要禁用它,請(qǐng)刪除(或重載)你的 sitecustomize 或 usercustomize 模塊或 PYTHONSTARTUP 文件中的 sys.__interactivehook__ 屬性。
在 3.4 版更改: rlcompleter 和 history 會(huì)被自動(dòng)激活。
模塊內(nèi)容
site.PREFIXES
site-packages 目錄的前綴列表。
site.ENABLE_USER_SITE
顯示用戶 site-packages 目錄狀態(tài)的旗標(biāo)。 True 意味著它被啟用并被添加到 sys.path。 False 意味著它按照用戶請(qǐng)求被禁用 (通過 -s 或 PYTHONNOUSERSITE)。 None 意味著它因安全理由(user 或 group id 和 effective id 之間不匹配)或是被管理員所禁用。
site.USER_SITE
正在運(yùn)行的 Python 的用戶級(jí) site-packages 的路徑。 它可以為 None,如果 getusersitepackages() 尚未被調(diào)用的話。 默認(rèn)值在 UNIX 和非框架 macOS 編譯版上為 ~/.local/lib/python*X.Y*/site-packages,在 macOS 框架編譯版上為 ~/Library/Python/*X.Y*/lib/python/site-packages,而在 Windows 上則為 *%APPDATA%*\Python\Python*XY*\site-packages。 此目錄屬于站點(diǎn)目錄,這意味著其中的 .pth 文件將會(huì)被處理。
site.USER_BASE
用戶級(jí) site-packages 的基準(zhǔn)目錄的路徑。 它可以為 None,如果 getuserbase() 尚未被調(diào)用的話。 默認(rèn)值在 UNIX 和 macOS 非框架編譯版上為 ~/.local,在 macOS 框架編譯版上為 ~/Library/Python/*X.Y*,而在 Windows 上則為 *%APPDATA%*\Python。 這個(gè)值會(huì)被 Distutils 用來計(jì)算腳本、數(shù)據(jù)文件和 Python 模塊等的安裝目錄。 對(duì)于 用戶安裝規(guī)范。 另請(qǐng)參閱 PYTHONUSERBASE。
site.main()
將所有的標(biāo)準(zhǔn)站點(diǎn)專屬目錄添加到模塊搜索路徑。 這個(gè)函數(shù)會(huì)在導(dǎo)入此模塊時(shí)被自動(dòng)調(diào)用,除非 Python 解釋器啟動(dòng)時(shí)附帶了 -S 旗標(biāo)。
在 3.3 版更改: 這個(gè)函數(shù)使用無條件調(diào)用。
site.addsitedir(sitedir, known_paths=None)
將一個(gè)目錄添加到 sys.path 并處理其 .pth 文件。 通常被用于 sitecustomize 或 usercustomize (見下文)。
site.getsitepackages()
返回包含所有全局 site-packages 目錄的列表。
3.2 新版功能.
site.getuserbase()
返回用戶基準(zhǔn)目錄的路徑 USER_BASE。 如果它尚未被初始化,則此函數(shù)還將參照 PYTHONUSERBASE 來設(shè)置它。
3.2 新版功能.
site.getusersitepackages()
返回用戶專屬 site-packages 目錄的路徑 USER_SITE。 如果它尚未被初始化,則此函數(shù)還將參照 USER_BASE 來設(shè)置它。 要確定用戶專屬 site-packages 是否已被添加到 sys.path 則應(yīng)當(dāng)使用 ENABLE_USER_SITE。
3.2 新版功能.
命令行界面
site 模塊還提供了一個(gè)從命令行獲取用戶目錄的方式:
$ Python3 -m site --user-site/home/user/.local/lib/python3.3/site-packages
如果它被不帶參數(shù)地調(diào)用,它將在標(biāo)準(zhǔn)輸出打印 sys.path 的內(nèi)容,再打印 USER_BASE 的值以及該目錄是否存在,然后打印 USER_SITE 的相應(yīng)信息,最后打印 ENABLE_USER_SITE 的值。
--user-base
輸出用戶基本的路徑。
--user-site
輸出用戶site-packages目錄的路徑。
如果同時(shí)給出了兩個(gè)選項(xiàng),則將打印用戶基準(zhǔn)目錄和用戶站點(diǎn)信息(總是按此順序),并以 os.pathsep 分隔。
如果給出了其中一個(gè)選項(xiàng),腳本將退出并返回以下值中的一個(gè):如果用戶級(jí) site-packages 目錄被啟用則為 0,如果它被用戶禁用則為 1,如果它因安全理由或被管理員禁用則為 2,如果發(fā)生錯(cuò)誤則為大于 2 的值。
參見
-
PEP 370 — 分用戶的 site-packages 目錄
-
The initialization of the sys.path module search path — The initialization of sys.path.
網(wǎng)頁題目:創(chuàng)新互聯(lián)Python教程:site——指定域的配置鉤子
當(dāng)前URL:http://fisionsoft.com.cn/article/cdiijgh.html


咨詢
建站咨詢
