__init\uuuu.py在同一目录中找不到模块

2024-06-02 22:09:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要有关如何在python包中组织源代码的帮助-我已经在web上学习了一些教程(特别是this one),了解了如何组织源代码,但它并没有按照说明和我的想象工作。

我想创建一个名为binaryio的python包。它应该提供两个名为BinaryReaderBinaryWriter的类,我希望用户能够使用它们导入

from binaryio import BinaryReader
from binaryio import BinaryWriter

因此,我创建了存储库和包目录结构,如下所示:

  • 二进制(存储库根)
    • 二进制(包根)
      • (见下文)
      • binaryreader.py(包含BinaryReader类)
      • binarywriter.py(包含BinaryWriter类)
    • setup.py(包含setuptools.setup调用)
    • .gitignore自述文件.md许可证。。。

如您所见,这些类在单独的文件中,因为我已经习惯了这一点(来自C#背景)。我不确定这是否是一个好主意,因为模块是Python中的“单元”,但在其他方面,将所有类压缩到一个巨大的文件中似乎不合逻辑。

\uu init\uu.py如下所示导入这些类,使(据我所知)以后用户可以导入from binaryio import BinaryReader

from binaryreader import BinaryReader
from binarywriter import BinaryWriter

但是,当我在本地安装包(看起来工作正常)并尝试import binaryio时,会出现以下错误:

>>> import binaryio
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Projects\Git\binaryio\binaryio\__init__.py", line 1, in <module>
    from binaryreader import BinaryReader
ModuleNotFoundError: No module named 'binaryreader'

显然,我的\uu init.py文件有问题。我不明白这一点,因为一个binaryreader.py文件aka模块与您上面看到的位于同一文件夹中。有趣的是,my IDE(PyCharm,将包根设置为源文件夹)不会抱怨其中的语句,并且可以解析所有引用。

我在这里做错什么了?根据上面链接的教程,将文件放入名为Abc的类的xyz.py中,然后将from xyz import Abc写入\uuinit.py中应该行得通,但显然对我来说不行。


Tags: 文件用户frompyimport源代码init二进制
2条回答

您的代码适用于Python 2.x,但不适用于3.x,因为相对导入语法不同:如果没有dot,python2.x将在module root和当前包中查找模块,而Python 3.x只在module root中查找模块。

要使用的导入语句如下:

from binaryio.binaryreader import BinaryReader
from binaryio.binarywriter import BinaryWriter

在没有“未来”的Python2.x和3.x中都有效

我认为你需要在进口声明中加一个点:

from .binaryreader import BinaryReader
from .binarywriter import BinaryWriter

相关问题 更多 >