gpt4 book ai didi

python - 在 pip install 上编译 C 库

转载 作者:行者123 更新时间:2023-12-01 02:26:16 24 4
gpt4 key购买 nike

我制作了一个需要执行 C 函数的 Python 应用程序。为此,我使用 gcc 在共享库中编译了 C 函数,并使用 ctypes 在 Python 脚本中调用了该库。

我正在尝试将我的应用程序打包在 pip 包中,但发现无法在 pip install 时创建共享库。

我尝试了以下(setup.py):

from setuptools import setup
from setuptools.command.install import install
import subprocess

class compileLibrary(install):
def run(self):
install.run(self)
command = "cd packageName"
command += " && git clone https://mygit.com/myAwesomeCLibrary.git"
command += " && gcc -my -many -options"
process = subprocess.Popen(command, shell=True)
process.wait()

setup(
name='packageName',
version='0.1',
packages=['packageName'],
install_requires=[
...
],
cmdclass={'install': compileLibrary},

)

这在执行python setup.py install时有效,但是,当从pip安装时,虽然安装过程成功,但共享库不在包文件夹中(pythonx.x/站 pip 包/包名称)。

我尝试使用 distutils 得到相同的结果。

基于问题Run Makefile on pip install我还尝试了以下 setup.py :

from setuptools import setup
from distutils.command.build import build
import subprocess


class Build(build):
def run(self):
command = "cd packageName"
command += " && git clone https://mygit.com/myAwesomeCLibrary.git"
command += " && gcc -my -many -options"
process = subprocess.Popen(command, shell=True)
process.wait()
build.run(self)


setup(
name='packageName',
version='0.1',
packages=['packageName'],
install_requires=[
...
],
cmdclass={'build': Build},
)

这是我的包的架构

packageName/
├── packageName/
│ ├── __init__.py
│ ├── myFunctions.c
├── MANIFEST.in
├── README.md
├── setup.py

注意:使用 pip 安装软件包后,安装文件夹 (pythonx.x/site-packages/包名)。

如何在 pip install 期间创建共享库,以便我的包可以使用它?

最佳答案

经过几个小时的研究,我找到了解决方案。主要问题是:

  • 使用 setuptools 中的Extension 来编译库
  • 使用自定义安装函数git clone在最后调用构造函数,以便git clone在编译之前发生。<

这是工作的setup.py:

from setuptools import setup, Extension
from setuptools.command.install import install
import subprocess
import os

class CustomInstall(install):
def run(self):
command = "git clone https://mygit.com/myAwesomeCLibrary.git"
process = subprocess.Popen(command, shell=True, cwd="packageName")
process.wait()
install.run(self)

module = Extension('packageName.library',
sources = ['packageName/library.c'],
include_dirs = ['packageName/include'],
extra_compile_args=['-fPIC'])

setup(
name='packageName',
version='0.1',
packages=['packageName'],
install_requires=[
...
],
cmdclass={'install': CustomInstall},
include_package_data=True,
ext_modules=[module],
)

关于python - 在 pip install 上编译 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47360113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com