1) 分发 libbig.so
这是python无法帮助您解决的问题。你的目标是谁?如果是 linux,你能要求他们用他们的包管理器安装它吗?如果 libbig 不是通过包管理器分发的,或者它不是 linux 并且您的目标是多个体系结构,那么您可能必须分发 libbig 源代码。
2) Cython/setuptools。
坦率地说,我认为只要求人们拥有 Cython 是最简单的。这样,代码只有一个基本事实版本,您不必担心代码.pyx和.cpp代码之间的不一致。最简单的方法是使用setuptools而不是distutils. 这样,您可以使用:
setup('mypackage',
...
install_requires=['cython'])
总的来说,您的setup.py脚本将类似于:
# setup.py
from setuptools import setup, Extension
from Cython.Distutils import build_ext
pysmall = Extension('pysmall',
sources = ['pysmall.pyx', 'small.cpp'],
include_dirs = ['include/'])
setup(name='mypackage',
packages=['yourpurepythonpackage'],
install_requires=['cython==0.17'],
ext_modules=[pysmall],
cmdclass = {'build_ext': build_ext})
如果您不喜欢需要 cython 的想法,您可以执行以下操作:
# setup.py
import warnings
try:
from Cython.Distutils import build_ext
from setuptools import setup, Extension
HAVE_CYTHON = True
except ImportError as e:
HAVE_CYTHON = False
warnings.warn(e.message)
from distutils.core import setup, Extension
from distutils.command import build_ext
pysmall = Extension('pysmall',
sources = ['pysmall.pyx', 'small.cpp'],
include_dirs = ['include/'])
configuration = {'name': 'mypackage',
'packages': ['yourpurepythonpackage'],
'install_requires': ['cython==0.17'],
'ext_modules': [pysmall],
'cmdclass': {'build_ext': build_ext}}
if not HAVE_CYTHON:
pysmall.sources[0] = 'pysmall.cpp'
configuration.pop('install_requires')
setup(**configuration)