1 回答
TA贡献2036条经验 获得超8个赞
最大的误解来源是“包”这个词被重载了。游戏中有 4 个不同的名称——用于开发的目录名称(包含setup.py的目录名称)、包含的目录名称__init__.py和其他可导入模块的名称、PyPI 中的分发名称以及扩展名。通常前 3 个相同或相似,但这不是必需的。
开发目录的名字可以是任意的,它的名字没有任何作用。当然,正确命名它很方便,但这只是方便。
包含 Python 文件的目录名称命名要导入的包。一旦包被命名为导入,名称通常会被卡住并且无法更改。
发行版的名称在 PyPI 上给出了一页和发行版文件的名称(源发行版、鸡蛋、轮子)。这是人们setup(name='distribution')呼唤的名字。
扩展是 python 模块,因此扩展的名称必须是正确的模块名称。但是输入的名称Extension()必须是模块的完整 python 路径,包括顶级包名称。在你的例子中是
Extension(
name = 'Abc.Xyz',
sources = ['a.cpp', 'b.cpp']
)
这会产生一个可以导入为的扩展
import Abc.Xyz
或者
from Abc import Xyz
或者
from Abc.Xyz import <internal name>
让我展示详细的真实例子。我一直在维护一个名为CheetahTemplate的模板库。我在名为cheetah3/. PyPI 的发行版称为Cheetah3;这是我输入的名字setup(name='Cheetah3')。因此,顶级模块是Cheetah一个 doimport Cheetah.Template或from Cheetah import Template; 这意味着我有一个目录cheetah3/Cheetah/。
图书馆有一个扩展名_namemapper。中使用的名称Extension()是Cheetah._namemapper。
添加回答
举报