首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可从我的包的tab-completion中获得的其他包

可从我的包的tab-completion中获得的其他包
EN

Stack Overflow用户
提问于 2018-09-07 04:57:21
回答 1查看 30关注 0票数 0

当我导入我创建的Python3包时,该包的Tab键补全包括一些由我的包从其他包(如pandas )导入的包。

该程序包具有以下基本结构:

代码语言:javascript
复制
foo/
    foo/
    __init__.py
    bar.py
    baz.py
    qux.py
    setup.py

我的__init__.py包含

代码语言:javascript
复制
from .bar import *
from .baz import *
from .qux import *

问题是baz.py看起来像这样

代码语言:javascript
复制
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的制表符补全的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-09-07 05:04:12

__init__.py中设置__all__,以定义从模块执行import *操作时应公开的内容:

对于包的作者来说,唯一的解决方案是提供包的显式索引。import语句使用以下约定:如果包的__init__.py代码定义了一个名为__all__的列表,则它将被视为在遇到from package import *时应导入的模块名称的列表。当新版本的包发布时,由包的作者负责保持此列表最新。

例如:

代码语言:javascript
复制
__all__ = ["stuff", "you", "want", "to", "expose"]

或者,您可以从names starting with _ won't be imported by default开始使用import pandas as _pd

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52212063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档