参见英文答案 >
ImportError on python 3, worked fine on python 2.7 1个
我需要有关如何在python包中组织源代码的帮助 – 我已经在网上(尤其是
this one)上有关于如何操作的几个教程,但它不能像解释的那样工作以及我如何想象它.
我想创建一个名为binaryio的python包.它应该提供两个名为BinaryReader和BinaryWriter的类,我希望用户能够导入它们
from binaryio import BinaryReader
from binaryio import BinaryWriter
因此,我创建了我的存储库和包目录结构,如下所示:
> binaryio(存储库根)
> binaryio(包根)
> __init__.py(下面的)
> binaryreader.py(包含BinaryReader类)
> binarywriter.py(包含BinaryWriter类)
> setup.py(包含setuptools.setup调用)
> .gitignore,README.md,LICENSE,…
正如您所看到的,这些类在我已经习惯的单独文件中(来自C#背景).由于模块是Python中的“单元”,我不确定这是不是一个好主意 – 但是将所有类别限制在一个巨大的文件中对我来说似乎不合逻辑.
__init__.py看起来如下导入这些类,使得(据我所知)二进制导入BinaryReader导入以后的用户可能:
from binaryreader import BinaryReader
from binarywriter import BinaryWriter
但是,当我在本地安装软件包(似乎工作正常)并尝试导入binaryio时,我收到以下错误:
>>> import binaryio
Traceback (most recent call last):
File "", line 1, in
File "D:\Projects\Git\binaryio\binaryio\__init__.py", line 1, in
from binaryreader import BinaryReader
ModuleNotFoundError: No module named 'binaryreader'
显然,我的__init__.py文件有问题.我不明白这一点,因为binaryreader.py文件aka模块存在于您上面看到的同一文件夹中.有趣的是,我的IDE(PyCharm,将包根设置为源文件夹)不会抱怨其中的语句并且可以解析所有引用.
我在这做错了什么?根据上面链接的教程,将文件放入xyz.py并使用名为Abc的类然后从xyz import Abc写入__init__.py应该可以工作,但显然它不适合我.