[英]Remove imported modules from python
如果我有一個名為“xtraimport.py”的 python 文件,其中包含以下內容:
import os
import sys
def its_true():
return True
當我導入它時,它包含符號“os”和“sys”:
In [3]: import xtraimport
In [4]: dir(xtraimport)
Out[4]:
['__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'its_true',
'os',
'sys']
有什么辦法可以消除命名空間污染? 我知道符號是在我的模塊中導入的,但我不想將它們暴露給使用該庫的每個人。
對此進行一些控制的一種方法是將您的模塊變成 package。 在 python 路徑上,創建xtraimport
。 在該目錄中放置兩個文件:(1) xtraimport.py
和 (2) __init__.py
。 對於__init__.py
的內容,使用:
from xtraimport import its_true
這樣,只有its_true
直接暴露出來了:
In [1]: import xtraimport
In [2]: dir(xtraimport)
Out[2]:
['__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'__path__',
'its_true',
'xtraimport']
xtraimport
的全部內容仍然可供願意采取額外步驟的專用用戶使用:
In [3]: dir(xtraimport.xtraimport)
Out[3]:
['__builtins__',
'__doc__',
'__file__',
'__name__',
'__package__',
'its_true',
'os',
'sys']
更輕松? 可能不是。 但是,如果您喜歡,這里有一個解決方案。
import xtraimport
import sys
originalDir = dir(xtraimport)
newDir = [x for x in originalDir if x not in sys.modules]
在這里查看有關sys.modules
的更多詳細信息: sys.modules
設置__all__
允許您指定希望模塊的公共接口包含哪些名稱。 它實際上並沒有阻止其他人被訪問,但它會影響from foo import *
, pydoc ,並且它可能會影響自動完成,具體取決於自動完成軟件。
例如:
__all__ = ["my_function", "MyClass"]
要刪除導入的模塊,例如,如果我要刪除導入的 cv2 模塊,我可以這樣做(Python 3.9):
我可以看到 cv2 已導入: print(dir())
現在刪除 cv2: del cv2
再次檢查: print(dir())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.