首页 > 解决方案 > 编译和执行在 C 中嵌入了 Python 的 C 文件时出现问题

问题描述

我有一个小的 C 代码,其中我将 Python 代码嵌入到 C 中。基本上,这个想法是从 C 执行一个 python 函数,并从 Python 函数获取所需的结果到 C。我在编译时遇到了很多问题,更具体链接器错误。所以我必须手动给出一些路径并编译它,看起来像

首先我需要这样做,

 export LD_LIBRARY_PATH=/home/aipir/anaconda3/lib:$LD_LIBRARY_PATH

接着

 export PYTHONPATH='/home/aipir/anaconda3/lib/python3.8'
 export PYTHONHOME='/home/aipir/anaconda3/lib/python3.8'

然后使用编译C文件

gcc -Wall -I/home/aipir/anaconda3/include/python3.8 main1.c -L/home/aipir/anaconda3/lib/ -lpython3.8

我的代码是通过将 C 文件中的参数传递给 Python 模块来计算两个数字的总和,并将结果返回给 C 文件。下面的python代码:

def add(a, b):
    return a+b

执行命令是

./a.out cal add 23 45

现在的问题是当我尝试在 Python 中导入库时

import pandas
import numpy

这会导致错误

ModuleNotFoundError: No module named 'pandas'

我已经完成了这两项工作pip install pandas/numpyconda install pandas/numpy但是当我从 C File Execuable 执行时仍然遇到相同的错误。但是当我在终端中从 Python Interpreter 运行时,导入工作没有任何错误。

这也是sys.path

['', '/home/aipir/anaconda3/lib/python3.8', '/home/aipir/anaconda3/lib/python3.8/lib/python38.zip', '/home/aipir/anaconda3/lib/python3.8/lib/python3.8', '/home/aipir/anaconda3/lib/python3.8/lib/python3.8/lib-dynload']

请为此提出解决方案?谢谢,哈沙瓦丹。

标签: pythonc

解决方案


由于您的操作系统中安装了许多 Python 版本,因此会发生这种情况。如果你想从你的 Linux 中删除一些 Python 版本是很困难的。简单的解决方案是对 Ubuntu 20.04 LTS 执行相同的操作。因为它只有 Python 3 而没有 Python 2。这应该可以。它对我有用。


推荐阅读