簡體   English   中英

其他可從我的軟件包的制表符完成的軟件包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM