1 回答

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
最大的誤解來源是“包”這個(gè)詞被重載了。游戲中有 4 個(gè)不同的名稱——用于開發(fā)的目錄名稱(包含setup.py的目錄名稱)、包含的目錄名稱__init__.py和其他可導(dǎo)入模塊的名稱、PyPI 中的分發(fā)名稱以及擴(kuò)展名。通常前 3 個(gè)相同或相似,但這不是必需的。
開發(fā)目錄的名字可以是任意的,它的名字沒有任何作用。當(dāng)然,正確命名它很方便,但這只是方便。
包含 Python 文件的目錄名稱命名要導(dǎo)入的包。一旦包被命名為導(dǎo)入,名稱通常會(huì)被卡住并且無法更改。
發(fā)行版的名稱在 PyPI 上給出了一頁和發(fā)行版文件的名稱(源發(fā)行版、雞蛋、輪子)。這是人們setup(name='distribution')呼喚的名字。
擴(kuò)展是 python 模塊,因此擴(kuò)展的名稱必須是正確的模塊名稱。但是輸入的名稱Extension()必須是模塊的完整 python 路徑,包括頂級(jí)包名稱。在你的例子中是
Extension(
name = 'Abc.Xyz',
sources = ['a.cpp', 'b.cpp']
)
這會(huì)產(chǎn)生一個(gè)可以導(dǎo)入為的擴(kuò)展
import Abc.Xyz
或者
from Abc import Xyz
或者
from Abc.Xyz import <internal name>
讓我展示詳細(xì)的真實(shí)例子。我一直在維護(hù)一個(gè)名為CheetahTemplate的模板庫(kù)。我在名為cheetah3/. PyPI 的發(fā)行版稱為Cheetah3;這是我輸入的名字setup(name='Cheetah3')。因此,頂級(jí)模塊是Cheetah一個(gè) doimport Cheetah.Template或from Cheetah import Template; 這意味著我有一個(gè)目錄cheetah3/Cheetah/。
圖書館有一個(gè)擴(kuò)展名_namemapper。中使用的名稱Extension()是Cheetah._namemapper。
添加回答
舉報(bào)