将python C包安装到bin文件夹中

时间:2018-01-05 16:32:16

标签: python c

我想知道如何在本地安装setup.py安装c模块。本地不在/usr/local/python..而在~/local/python...,但在[where_all_my_code_is]/bin,我可以从[where_all_my_code_is]文件夹中的脚本导入。

我有一些c代码。 SRC /富/ foo.c的

#include <Python.h>
static PyObject * foo(PyObject* o) {
    PyObject* five = PyInt_FromLong(5);
    return PyNumber_Add(&o, &five);
}
static PyMethodDef funcs[] = {
    {"foo", (PyCFunction)foo, METH_VARARGS, "foo, foo and more foo"},
    {NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC initaddList(void){
    Py_InitModule3("foo", funcs, "do the foo");
}

setup.py

from distutils.core import setup, Extension

setup(name='foo', version='1.0',
    ext_modules=[Extension('foo', ['src/foo/foo.c'])])

现在,我不想将它安装到我的any / local / python文件夹或其他任何文件夹中,而是希望代码位于模块旁边的bin文件夹中。

e.g。

~/My_python_project
     ./src
         ./foo
             ./foo.c
         ./some_code_that_imports_foo.py
     ./bin
         ./foo
             ./my_importable_foo.so

some_code_that_imports_foo.py:

import foo
print(foo.foo(10))
# prints 15

完成这件事的最合适/最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

这是一个选项:

使用

进行设置
$ python3 setup.py install --root . --install-lib lib

将本地lib路径添加到python路径

$ export PYTHONPATH:$PYTHONPATH:./lib

现在.中的python脚本可以导入我们刚编译的c模块。 对于我在问题中建议的确切场景,需要使用更高级的东西,但一般程序应该适用。

限制?可能的陷阱? brittlenesses?