【发布时间】:2018-02-17 12:56:10
【问题描述】:
我的包结构如下:
analysis/
__init__.py
main.py
utils/
__init__.py
myzip.py
myzip.py 包含以下内容:
import pandas
def save():
...
def load():
...
在我的main.py 脚本中我这样做:
from utils import myzip
当我输入myzip.<TAB> 或输入dir(myzip) 时,导入的pandas 也会出现。 我可以避免在子模块中显示pandas 吗? 是否有导入第三方模块的最佳做法?
我尝试将以下内容添加到analysis/utils/__init__.py:
from utils.myzip import save, load
但当我 dir(myzip) 形成 main.py 时,它仍然显示 pandas。
看着from sklearn import cluster,他们设法实现了这一点,但没有显示他们拥有的所有numpy 导入,例如在cluster/k_means_.py
【问题讨论】:
-
如果您的保存和加载功能依赖于 pandas,那么您的程序需要能够访问 pandas 而不考虑它尝试执行保存和加载功能的位置是否有意义?跨度>
-
dir(utils)在哪里被执行?您的示例代码都没有导入utils。 -
@martineau 感谢您指出这一点,这是一个错字。如果我确实导入
utils和它,那么我会得到 save、load和myzip作为建议。这接近我嵌套到文件夹的解决方案,缺点是我想使用myzip.save()而不是utils.save()。 -
您的 sklearn 示例不平行。您正在导入
cluster,而不是k_means_,因此您只能在cluster中看到名称,而cluster不会从k_means_导入np。如果您执行from sklearn.cluster import k_means_,您将看到k_means_.np确实可用。您可以使用与您发布的解决方案类似的解决方案轻松实现这一目标。
标签: python import module package