【发布时间】:2018-10-10 14:54:42
【问题描述】:
我有一个仅在我的 Python 扩展中使用的标头 C++ 库。我希望能够将它们安装到 Python 的包含路径中,这样我就可以使用 python3 setup.py build 轻松编译扩展。我有部分能力,但有两件事我无法工作(见下文):
如何使用
python3 setup.py install安装头文件?目前我只得到一些*.egg文件,但没有安装头文件。如何保留模块的文件结构?目前文件结构被错误地展平了。
什么有效
以下setup.py
from setuptools import setup
setup(
name = 'so',
description = 'Example',
headers = [
'so.h',
],
)
我可以将模块上传到 PyPi:
python3 setup.py bdist_wheel --universal
twine upload dist/*
然后使用 pip 安装它:
pip3 install so
在我的系统上然后我在这里找到标题
/usr/local/include/python3.6m/so/so.h
当我使用 Python 编译扩展时可用。
如何使用“python3 setup.py install”?
使用这个策略我不能简单地运行
python3 setup.py install
在这种情况下,一些so*.egg 已安装,但标头并未存储在编译器可用的位置。
如何保留文件结构?
当模块有点复杂,并且有一些目录层次结构时,我也会遇到问题。对于以下setup.py
from setuptools import setup
setup(
name = 'so',
description = 'Example',
headers = [
'so.h',
'so/implementation.h',
],
)
问题是标头安装到
/usr/local/include/python3.6m/so/so.h
/usr/local/include/python3.6m/so/implementation.h
从而扁平化原始文件结构。
如何解决这两个问题?
【问题讨论】:
标签: python python-3.x setuptools setup.py header-only