[英]Other packages available from my package's tab-completion
當我導入創建的Python 3軟件包時,該軟件包的制表符完成包括一些由我的軟件包從其他軟件包(例如pandas
中導入的軟件包。
該軟件包具有以下基本結構:
foo/
foo/
__init__.py
bar.py
baz.py
qux.py
setup.py
我的__init__.py
包含
from .bar import *
from .baz import *
from .qux import *
問題是baz.py
看起來像這樣
import pandas as pd
def f1(data):
# do something with pandas (pd)
def f2(data):
# do something different with pandas (pd)
因此,當我import foo
,我得到了foo.pd
選項,例如foo.pd
,這實際上不是有效的東西。 對於所有foo.X
我希望X
成為我定義的函數或類,而不是從另一個包中導入。
最好的辦法是什么? 我應該將import pandas as pd
添加到__init__.py
嗎? 我知道我可以在每個函數import pandas as pd
,但是對於像這樣的簡單示例而言,這似乎有些過頭了。
Jupyter的制表符完成僅僅是問題嗎?
在__init__.py
設置__all__
,以定義從模塊import *
時應顯示的內容:
唯一的解決方案是讓程序包作者提供程序包的顯式索引。
import
語句使用以下約定:如果程序包的__init__.py
代碼定義了名為__all__
的列表,則將其視為遇到from package import *
時應導入的模塊名稱的列表。 發行新版本的軟件包時,軟件包作者有責任使此列表保持最新。
例如:
__all__ = ["stuff", "you", "want", "to", "expose"]
另外,您也可以import pandas as _pd
導入,因為默認情況下不會導入以_
開頭的名稱 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.