所以我有一个名为“裤子”的项目,住在GitHub.com上。最初该项目是一个名为.py
的{{1}}文件。
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
将其安装到安装中,是否有任何改变?
答案 0 :(得分:1)
要修复它,我保持我的包结构相同,并将以下行添加到pants/__init__.py
:
from .ant import Ant
from .world import World
from .solver import Solver
然后我可以将演示文件顶部的导入行更改为:
from pants import World
from pants import Solver
答案 1 :(得分:0)
而不是单独pants.py
将该代码放在__init__.py
中。然后当有人import pants
时,它会加载__init__.py
。 (我会避免使用大写的“Pants”,因为大写通常用于类名)
如果您的用户需要单独world
或solver
,您也可以
from pants import world,solver
w = world.World()
s = solver.Solver()
如果他们想要你的包裹中的所有东西,他们可以做到
from pants import *