5

我写了一个模块,有一天我想制作一个“包”。现在,我将它保存在 Python 路径上一个目录中的同名子文件夹中(其中有一个空__init__.py模块)。问题是,要将这些模块导入其他程序(并获得 Spyder 的自动完成功能以识别模块的内容),我必须执行类似的操作

from modulename import modulename

或者

import modulename.modulename as modulename

当我宁愿只是

import modulename

我尝试让__init__.py目录内部从模块中导入所有内容,但这不适用于 Spyder 的自动完成功能。这样做的适当方法是什么?Numpy 有许多模块,但在顶级命名空间中仍有一些可用。似乎它是通过例如

import core
from core import *

这是我应该采取的路线,还是我的问题是模块名称与文件夹名称相同?

4

3 回答 3

1

正如@Takahiro 建议的那样,拥有一个与包同名的模块并不是一个好主意,但这并非不可能。

modulename目录__init__.py中的可以如下:

from .modulename import *

然后,例如,该目录中的modulename.py可能是:

def foo():
    print('I am foo')

那么客户端程序可以是

import modulename

modulename.foo()

或者

from modulename import foo

foo()

等等

于 2021-04-16T11:26:07.750 回答
0

不要在其包中创建具有相同名称的模块。 http://docs.python.org/2/tutorial/modules.html#the-module-search-path

于 2013-09-18T05:25:26.900 回答
0

在问题标题中,您询问了仅包含一个模块的包,但后来您询问了 Spyder。无论如何,我仍然相信这可以看作是StackExchange.com 中这个问题的重复。用户Martijn Pieters有一个很好的答案。为了提供一些答案,而不仅仅是一个链接,我将在下面总结。

您不必为您的模块(文件)创建包(子文件夹)。只需将您的module.py文件放入项目的根目录中,例如setup.py is. 来自 Martijn Pieters 的回答:

你做最适合你的最简单的事情。...

包对于创建额外的命名空间和/或跨多个模块组织代码很有用。

如果您想要示例:六个是仅一个模块的分布

在 Python 文档的这个页面上提到了这样的单个模块分布。

于 2021-04-16T09:52:07.137 回答