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