我正在尝试构建一个Python扩展并使用distutils将其打包,但无论我如何命名,扩展都会安装在root包中。我的目录布局如下所示:
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!
我可以更改哪些内容以使第一个导入语句起作用而第二个导入语句失败?
答案 0 :(得分:1)
我认为您需要foo/__init__.py
和foo/bar/__init__.py
,以便distutils首先安装这些软件包,然后安装扩展模块。 (错误会比这里的无声不当行为更好,我会打开一个错误报告,以便distutils2表现得更好。)
您使用的是自定义build_ext类吗? (因为你的例子中的cmdclass={'build_ext': build_ext}
提问)这可能会在问题中发挥作用。