1

我正在尝试构建一个 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 shell 中:

>>> 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!

我可以更改什么以使第一个导入语句起作用而第二个导入语句失败?

4

1 回答 1

1

我认为您需要拥有foo/__init__.pyfoo/bar/__init__.py以便 distutils 先安装这些软件包,然后再安装扩展模块。(这里的错误比无声的错误行为要好,我将打开一个错误报告,以便 distutils2 表现得更好。)

您是否使用自定义 build_ext 类?(因为cmdclass={'build_ext': build_ext}在你的例子中问)这可能在问题中起作用。

于 2012-01-04T15:45:50.850 回答