繁体   English   中英

使用 setup.py 安装 c 库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM