我需要有关如何在python包中组织源代码的帮助-我已经在web上学习了一些教程(特别是this one),了解了如何组织源代码,但它并没有按照说明和我的想象工作。
我想创建一个名为binaryio
的python包。它应该提供两个名为BinaryReader
和BinaryWriter
的类,我希望用户能够使用它们导入
from binaryio import BinaryReader
from binaryio import BinaryWriter
因此,我创建了存储库和包目录结构,如下所示:
BinaryReader
类)BinaryWriter
类)setuptools.setup
调用)如您所见,这些类在单独的文件中,因为我已经习惯了这一点(来自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中应该行得通,但显然对我来说不行。
您的代码适用于Python 2.x,但不适用于3.x,因为相对导入语法不同:如果没有dot,python2.x将在module root和当前包中查找模块,而Python 3.x只在module root中查找模块。
要使用的导入语句如下:
在没有“未来”的Python2.x和3.x中都有效
我认为你需要在进口声明中加一个点:
相关问题 更多 >
编程相关推荐