第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使 util 文件無法在 python 中訪問

使 util 文件無法在 python 中訪問

慕姐8265434 2023-06-06 10:29:37
我正在構(gòu)建一個(gè) python 庫。我希望用戶可用的功能在 stemmer.py 中。Stemmer.py 使用 stemmerutil.py我想知道是否有辦法讓用戶無法訪問 stemmerutil.py。
查看完整描述

1 回答

?
德瑪西亞99

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊

如果您想對(duì)用戶隱藏實(shí)施細(xì)節(jié),可以采用兩種方法。第一個(gè)使用約定來表示什么是公共 API 的一部分,什么不是公共 API 的一部分,另一個(gè)是 hack。


在 python 庫中聲明 API 的約定是將所有應(yīng)公開的類/函數(shù)/名稱添加到最頂層的__all__-list__init__.py中。它并沒有做那么多有用的事情,現(xiàn)在它的主要目的是象征性的“請(qǐng)使用這個(gè)而不是別的”。你的可能看起來有點(diǎn)像這樣:

urdu/urdu/__init__.py

from?urdu.stemmer?import?Foo,?Bar,?Baz
__all__?=?[Foo,?Bar,?Baz]

為了強(qiáng)調(diào)這一點(diǎn),你也可以在他們的名字之前用stemmerUtil.py?下劃線給出所有的定義,例如def privateFunc(): ...變成def _privateFunc(): ...


但是您也可以通過將代碼作為資源而不是包中的模塊并動(dòng)態(tài)加載它來對(duì)解釋器隱藏代碼。這是一個(gè) hack,可能是個(gè)壞主意,但在技術(shù)上是可行的。

首先,你重命名stemmerUtil.py為 just?stemmerUtil- 現(xiàn)在它不再是一個(gè) python 模塊,不能用import關(guān)鍵字導(dǎo)入。接下來,更新這一行stemmer.py

import?stemmerUtil

import importlib.util

import importlib.resources??

# in python3.7 and lower, this is importlib_resources and needs to be installed first



stemmer_util_spec = importlib.util.spec_from_loader("stemmerUtil", loader=None)

stemmerUtil = importlib.util.module_from_spec(stemmer_util_spec)


with importlib.resources.path("urdu", "stemmerUtil") as stemmer_util_path:

? ? with open(stemmer_util_path) as stemmer_util_file:

? ? ? ? stemmer_util_code = stemmer_util_file.read()

exec(stemmer_util_code, stemmerUtil.__dict__)

運(yùn)行此代碼后,您可以stemmerUtil像導(dǎo)入它一樣使用該模塊,但安裝您的包的任何人都看不到它 - 除非他們也運(yùn)行此確切代碼。


但正如我所說,如果您只是想與您的用戶交流您的包的哪一部分是公共 API,那么第一種解決方案更為可取。


查看完整回答
反對(duì) 回復(fù) 2023-06-06
  • 1 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)