当我导入我创建的Python3包时,该包的Tab键补全包括一些由我的包从其他包(如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.X,我希望X是由我定义的函数或类,而不是从另一个包导入。
解决这个问题的最好方法是什么?我应该在__init__.py中添加import pandas as pd吗?我知道我可以在每个单独的函数中使用import pandas as pd,但是对于任何比这个简单的例子更多的东西来说,这似乎有点过分了。
这仅仅是Jupyter的制表符补全的问题吗?
发布于 2018-09-07 05:04:12
在__init__.py中设置__all__,以定义从模块执行import *操作时应公开的内容:
对于包的作者来说,唯一的解决方案是提供包的显式索引。
import语句使用以下约定:如果包的__init__.py代码定义了一个名为__all__的列表,则它将被视为在遇到from package import *时应导入的模块名称的列表。当新版本的包发布时,由包的作者负责保持此列表最新。
例如:
__all__ = ["stuff", "you", "want", "to", "expose"]或者,您可以从names starting with _ won't be imported by default开始使用import pandas as _pd。
https://stackoverflow.com/questions/52212063
复制相似问题