[英]Installing c library with setup.py
我已经编写了一个我正在尝试安装的 python 包。 有一个结构:
packagename
|
|--- setup.py
|--- module_name
|
|--- library.c
library.c 文件已成功安装在此软件包之外,使用:
gcc library.c -Wall -pedantic -o spec_conv -lm -O2
我的 setup.py 文件如下所示:
from setuptools import setup, Extension
with open("README.md", "r") as fh:
long_description = fh.read()
module = Extension('library',
sources = ['module_name/library.c'],
extra_compile_args=['-Wall', '-pedantic', '-o', 'library', '-lm', '-O2'])
setup(
name="module_name", # Replace with your own username
version="0.0.1",
author="",
author_email="",
description="",
long_description=long_description,
long_description_content_type="text/markdown",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
install_requires=[
'pandas',
'pexpect'],
#cmdclass={'install': CustomInstall},
#include_package_data=True,
ext_modules=[module],
)
当我运行pip install -e .
编译返回错误消息: https ://pastebin.com/hMLA95G9
继@9769953 的评论之后,我尝试编辑 setup.py 以直接链接到文件的完整路径:
from pathlib import Path
ROOT_PATH = Path(__file__).parent.resolve()
module = Extension('spec_con',
sources = ['spec_conv/spec_con.c'],
extra_compile_args=['-Wall', '-pedantic', '-o', f'{ROOT_PATH}/module_name/library', '-lm', '-O2'],
library_dirs=["/home/alletro/python_packages"])
但我仍然得到同样的错误。
错误来自链接器,它找不到编译器构建的目标文件。 找不到目标文件,因为您手动指定了目标文件路径,并且它最终出现在错误的位置。
解决方案是将'-o', 'library'
项从extra_compile_args
选项中删除到Extension
。
这样,Distutils 和 gcc 将自动为生成的目标文件提供正确的名称(特别是正确的完整目录路径),然后链接器可以成功选择该名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.