我写了一个模块,我希望有一天能制作一个“包”。现在我将它保存在我的Python路径中的目录中具有相同名称的子文件夹中(其中带有一个空的__init__.py
模块)。问题是,要将这些模块导入其他程序(并让Spyder的自动完成识别模块的内容),我必须做类似的事情
from modulename import modulename
或
import modulename.modulename as modulename
当我宁愿
时import modulename
我已尝试在目录中导入__init__.py
从模块导入所有内容,但这不适用于Spyder的自动完成功能。这样做的恰当方法是什么? Numpy有很多模块,但仍有一些可用于顶级命名空间。它似乎通过例如这样做。
import core
from core import *
这是我应该采取的路线,还是我的问题是模块名称与文件夹名称相同?
答案 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 中提到了这种单模块分布。