因此,我有一個名爲「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