Python扩展未安装到子包中

1 投票
1 回答
1303 浏览
提问于 2025-04-17 09:02

我正在尝试创建一个Python扩展,并使用distutils打包,但无论我怎么命名,这个扩展总是安装在根包里。我的目录结构是这样的:

foo/bar/extension.c

我的 setup.py 文件看起来是这样的:

from distutils.core import setup
from distutils.extension import Extension

setup(name='foo.bar.extension',
      cmdclass={'build_ext': build_ext},
      ext_modules=[Extension('foo.bar.extension',
                             sources=['foo/bar/extension.c'])]
)

我设置了一个 virtualenv 并运行了:

python setup.py install

然后在我的Python环境中:

>>> import foo.bar.extension
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named invest_cython_core
>>> import extension #This works!

我该怎么改才能让第一个导入语句成功,而第二个导入语句失败呢?

1 个回答

1

我觉得你需要有 foo/__init__.pyfoo/bar/__init__.py 这两个文件,这样distutils才能先安装这些包,然后再安装扩展模块。这里出现错误总比悄悄出问题要好,我打算提交一个bug报告,让distutils2表现得更好。

你在用自定义的build_ext类吗?(我这么问是因为你例子里的 cmdclass={'build_ext': build_ext})这可能和问题有关。

撰写回答