我需要有关如何在python包中组织源代码的帮助 - 我已经在网上(尤其是this one)上关于如何执行此操作的几个教程,但它不能解释如何以及我如何工作想象它。
我想创建一个名为binaryio
的python包。它应该提供两个名为BinaryReader
和BinaryWriter
的类,我希望用户可以使用
from binaryio import BinaryReader
from binaryio import BinaryWriter
因此,我创建了我的存储库和包目录结构,如下所示:
BinaryReader
类)BinaryWriter
类)setuptools.setup
电话)正如您所看到的,这些类是在我习惯的单独文件中(来自C#背景)。由于模块是Python中的“单元”,我不确定这是不是一个好主意 - 但是将所有类压缩成一个巨大的文件对我来说似乎不合逻辑。
__ init __。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'
显然,我的 __ init __。py 文件出了问题。我不明白这一点,因为 binaryreader.py 文件aka模块存在于您上面看到的同一文件夹中。有趣的是,我的IDE(PyCharm,将包根设置为源文件夹)不会抱怨其中的语句并且可以解析所有引用。
我在这里做错了什么?根据上面链接的教程,将文件放入 xyz.py 并使用名为Abc
的类,然后将from xyz import Abc
写入 __ init __。py 应该工作,但显然它不适合我。
答案 0 :(得分:5)
您的代码适用于Python 2.x,但不适用于3.x,因为相对导入语法不同:没有dot,Python 2.x会在模块根和当前包中寻找模块,并且Python 3.x在模块根目录中只显示 。
您要使用的导入语句包括:
from binaryio.binaryreader import BinaryReader
from binaryio.binarywriter import BinaryWriter
适用于Python 2.x和3.x,没有&#34;期货&#34;
答案 1 :(得分:3)
我认为您需要在导入语句中添加一个点:
from .binaryreader import BinaryReader
from .binarywriter import BinaryWriter