如何创建只有一个模块的Python包?

时间:2013-09-18 05:06:45

标签: python python-2.7

我写了一个模块,我希望有一天能制作一个“包”。现在我将它保存在我的Python路径中的目录中具有相同名称的子文件夹中(其中带有一个空的__init__.py模块)。问题是,要将这些模块导入其他程序(并让Spyder的自动完成识别模块的内容),我必须做类似的事情

from modulename import modulename

import modulename.modulename as modulename

当我宁愿

import modulename

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

import core
from core import *

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

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

<块引用>

你只做对你有用的最简单的事情。 ...

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

如果您需要示例:six 是仅 one module

的分布

在 Python 文档的 this page 中提到了这种单模块分布。