使用 setuptools 的 Cython bdist_egg 创建了无效的包
Cython bdist_egg with setuptools creates invalid package
我正在尝试编译 *.pyx 文件。它在同一目录中的 __init__.py
中使用一些定义和常量。项目结构为:
setup.py
Foo/__init__.py
Foo/Foo.pyx
设置命令如下:
from setuptools import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy
setup(
cmdclass = {'build_ext': build_ext},
ext_module = [ Extension(name='Foo', sources=['Foo/Foo.pyx']) ],
include_dirs=[numpy.get_include()],
name='Foo',
packages=['Foo'],
zip_safe=True
)
构建和部署 egg 时出现问题。生成的鸡蛋具有以下结构:
Foo.so
Foo.py
Foo/__init__.py
现在,Foo.py
包含一些基本上导入 *.so 文件的动态导入代码。但是,由于 Foo/__init__.py
的存在,import Foo
尝试仅从 __init__.py
导入符号,其中仅包含一些常量(所有相关代码实际上都在 Foo.so
中)。
我已经通过将 __init__.py
中的所有定义粘贴到 Foo.pyx
中解决了这个问题,但我正在尝试找出合适的解决方案。
如有任何建议,我们将不胜感激!
我发现我的问题是 setup()
命令的一个无关参数。根据 https://docs.python.org/2/distutils/setupscript.html 上的文档判断,我不需要 packages=['Foo']
参数,事实上这就是导致它创建内部 Foo
包的原因,它把一切都搞砸了。
我正在尝试编译 *.pyx 文件。它在同一目录中的 __init__.py
中使用一些定义和常量。项目结构为:
setup.py
Foo/__init__.py
Foo/Foo.pyx
设置命令如下:
from setuptools import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy
setup(
cmdclass = {'build_ext': build_ext},
ext_module = [ Extension(name='Foo', sources=['Foo/Foo.pyx']) ],
include_dirs=[numpy.get_include()],
name='Foo',
packages=['Foo'],
zip_safe=True
)
构建和部署 egg 时出现问题。生成的鸡蛋具有以下结构:
Foo.so
Foo.py
Foo/__init__.py
现在,Foo.py
包含一些基本上导入 *.so 文件的动态导入代码。但是,由于 Foo/__init__.py
的存在,import Foo
尝试仅从 __init__.py
导入符号,其中仅包含一些常量(所有相关代码实际上都在 Foo.so
中)。
我已经通过将 __init__.py
中的所有定义粘贴到 Foo.pyx
中解决了这个问题,但我正在尝试找出合适的解决方案。
如有任何建议,我们将不胜感激!
我发现我的问题是 setup()
命令的一个无关参数。根据 https://docs.python.org/2/distutils/setupscript.html 上的文档判断,我不需要 packages=['Foo']
参数,事实上这就是导致它创建内部 Foo
包的原因,它把一切都搞砸了。