我想编译一些python库,我用python写入一个so文件。文件夹结构如下所示:
src/
main.py
packages/
lib1.py
lib2.py
lib3.py
lib4.py
...
__init__.py
(__init__.py
是一个空白文件)
在设置中我得到了类似的东西:
cythonize(["src/packages/*.py"])
compile = "gcc -shared -Os -I /usr/include/python2.7 -L /usr/lib/python2.7/config-x86_64-linux-gnu -o packages.so -fPIC src/packages/lib1.c src/packages/lib2.c ... src/packages/__init__.c -lpthread -ldl -lpython2.7"
os.system(compile)
通过这种方式,我得到了文件packages.so
。但是当我在python中导入它时,我在尝试使用我的函数时遇到错误,python说他们不在那里。
使用:
import packages
print dir(packages)
打印:
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__test__']
显示文件中不存在我的功能。但是,如果我在__init__.py
中添加了一些功能,则会使用dir
显示该功能。我尝试在import lib1
文件中导入其他模块(from lib1 import *
和__init__.py
)并且无效。我没有想法:c。
我做错了什么?有没有办法将它放在一个文件上,还是我必须用10个so
文件分发我的程序?