簡體   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