无法在python中导入cython生成的.so

时间:2015-11-04 05:00:38

标签: python cython

我搜索了很多关于ImportError: No module named错误的讨论,但似乎没有人可以解决我的问题,所以请允许我再问一次。

这是我的包文件夹结构:

/modules
├── build
│   ├── lib.linux-x86_64-2.7
│   │   └── Package
│   │       ├── __init__.so
│   │       ├── SendTraffic.so
│   │       └── Utils.so
│   └── temp.linux-x86_64-2.7
│       └── Package
│           ├── __init__.o
│           ├── SendTraffic.o
│           └── Utils.o
├── Package
│   ├── __init__.py
│   ├── SendTraffic.c
│   ├── SendTraffic.py
│   ├── SendTraffic.pyc
│   ├── Utils.c
│   ├── Utils.py
│   └── Utils.pyc
├── setup.py

和setup.py

from distutils.core import setup
from Cython.Build import cythonize
import os

os.environ['CFLAGS']="-s -O2"

setup(
    name = 'Hello world app',
    ext_modules = cythonize("Package/*.py"),
)

它可以成功构建.so文件。但是当我在/modules/build/lib.linux-x86_64-2.7下导入它们时:

/modules/build/lib.linux-x86_64-2.7$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information. 
>>> import Package.SendTraffic
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named Package.SendTraffic

在Package文件夹中,我可以成功导入它们:

/modules/build/lib.linux-x86_64-2.7/Package$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import SendTraffic
>>>

我也尝试将/modules/build/lib.linux-x86_64-2.7添加到sys.path中,但不起作用。使用setup.py install将它们安装到系统范围的包文件夹中也不起作用。

有人可以帮我成功导入Package.SendTraffic吗?

1 个答案:

答案 0 :(得分:0)

最后我找到了答案。

在包文件夹中,python不接受__init__.so,它需要__init__.py个文件