因此,我有一个名为“Pants”的项目,它位于GitHub.com上。该项目最初是一个.py
文件,名为pants.py
。如何避免我的代码用户输入冗余导入行?
Pants/
pants.py
README.md
和用户可以导入和使用它,如下所示:
import pants
w = pants.World()
这两种感觉没什么问题。然后,我就如何构建一个项目中读取了单元测试包括在内,并初步重组我的项目正是如此:
Pants/
pants.py
README.md
test/
__init__.py
test_world.py
test_ant.py
这样做的问题是,虽然用户仍然可以导入相同的逻辑方式,没有pants.test
模块/包!没问题,我想,我会简单地添加其他__init__.py
文件:
Pants/
__init__.py
pants.py
README.md
test/
__init__.py
test_world.py
test_ant.py
但现在进口觉得难以置信重复:
import Pants.pants
w = Pants.pants.World()
它只是感觉好像有一个更好的办法!现在,我的项目的结构是这样的:
Pants/
README.md
pants/
__init__.py
ants.py
world.py
solver.py
test/
__init__.py
test_world.py
test_ant.py
然而,进口线的用户都面临着同样的重复:
import pants.world
import pants.solver
w = pants.world.World()
s = pants.solver.Solver()
现在我知道你可以别名这些东西短等价物,例如import pants.world.World as World
,但导入线本身仍然是重复的。有关如何在保留适当项目结构的同时避免这种重复的建议?如果我想要通过pip
来安装它,那么是否有这些变化?
看看['ASYNCIO/__ __初始化py'。(HTTP://hg.python .ORG/CPython的/文件/ ae405c11193b /库/ ASYNCIO/__ init__.py)。如果'world.py'和'solver。py'是实现细节;您的用户可能会使用平面命名空间,即唯一的进口是'import pants' – jfs
太棒了,谢谢!我以为我曾经在某处读过将代码放入'__init __。py'中是一种不好的做法,但是在查看asyncio是如何做的以及[this SO question]之后(http://stackoverflow.com/questions/5831148/why我知道到底如何继续:) – rhgrant10