0

我试图__init__在 python 中使用该文件,虽然我做得正确,但我得到一个“没有名为...的模块”错误。

为简单起见,我将项目链接到项目。有问题的问题是pythonds/test/parens.py,我__init__.py的所有目录中都有文件,所以我不确定我哪里出了问题。

我也尝试过使用PEP 238from ..basic.stack import Stack并得到错误

ValueError: Attempted relative import in non-package

尽管我所要做的就是将__init__.py文件粘贴到我的目录中以使它们成为一个模块,然后我就可以从不同的模块中调用它们。

4

2 回答 2

1

__init__.py文件中,输入:

from myfile import *

例如:

pythonds/test/parens.py
pythonds/test/__init__.py

其中__init__.py将包含:

from parens import *

那是旧 python 版本的肮脏快速修复版本。考虑到您有多个子目录,对于所有 python 版本来说(见打击)会更好:

在您__init__.py的文件夹测试位置:

__all__ = ['tacos','falaffels']
from test.tacos import factory
from test.falaffels import stand

如果您具有以下文件夹结构,则上述内容应该可以工作:

main.py
/test/
    __init__.py
    tacos.py
    falaffels.py

还只是注意到这可能与以下内容重复:如何编写好的/正确的包 __init__.py 文件

于 2013-08-12T12:06:55.600 回答
0

令人讨厌的是,您忽略了实际错误:没有名为什么的模块?如果,正如我怀疑的那样,它说“没有名为'pythonds'的模块,那么问题根本与它无关__init__.py。只是基本pythonds目录不在你的Python路径上,可能是因为你正在运行测试在自己的目录中。

Python 自动将当前目录放在其路径中:因此,如果从该pythonds目录运行测试,您将能够执行from basic.stack import Stack. 否则,您可以将上述目录的完整路径添加 parendssys.path.

其他一些提示:您可能已经知道该collections模块已经定义了一个双端队列类,并且列表已经可以很容易地用作堆栈。但更重要的是,请注意在 Python 中没有必要为每个类定义一个单独的文件:所有三个都可以存在于同一个stack.py文件中。

此外,您的测试并不是真正的测试。您应该查看该unittest模块以了解如何在 Python 中编写适当的单元测试。

于 2013-08-12T12:19:30.373 回答