【发布时间】:2017-12-01 18:27:59
【问题描述】:
我需要有关如何在 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、许可证、...
- binaryio(包根目录)
如您所见,这些类位于不同的文件中,因为我已经习惯了(来自 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 文件又名模块存在于与您在上面看到的相同的文件夹中。有趣的是,我的 IDE(PyCharm,已将包根设置为源文件夹)不会抱怨其中的语句并且可以解析所有引用。
我在这里做错了什么?根据上面链接的教程,将一个文件放入 xyz.py 并带有一个名为 Abc 的类,然后将 from xyz import Abc 写入 __init__.py 应该可以工作,但显然它不适合我。
【问题讨论】:
-
本地安装包=使用打包工具还是直接解包?
-
@bakatrouble 在存储库根目录下,我运行
pip install .,然后尝试以交互模式导入。