我想用C扩展创建python包。我想用cython完成这个。我的结构是:
.
├── build
│ ├── lib.linux-i686-2.7
│ │ └── pyA13SOM
│ │ ├── cython
│ │ │ └── spi.so
│ │ └── __init__.py
│ └── temp.linux-i686-2.7
│ └── pyA13SOM
│ └── cython
│ ├── my_test.o
│ └── spi.o
├── CHANGES.txt
├── Makefile
├── MANIFEST
├── pyA13SOM
│ ├── cython
│ │ ├── clibraries
│ │ │ └── spi_test.c
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── spi.c
│ │ ├── spi.pyx
│ │ └── spi.so
│ ├── gpio
│ │ ├── gpio.c
│ │ ├── gpio_lib.c
│ │ ├── gpio_lib.h
│ │ ├── __init__.py
│ │ └── __init__.pyc
│ ├── i2c
│ │ ├── i2c.c
│ │ ├── i2c_lib.c
│ │ ├── i2c_lib.h
│ │ ├── __init__.py
│ │ └── __init__.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── spi
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── spi.c
│ │ ├── spi_lib.c
│ │ └── spi_lib.h
│ └── utilities
│ └── color.h
├── README.txt
└── setup.py
我的设置文件是:
from distutils.core import setup
from distutils.core import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext
module_gpio = Extension('pyA13SOM.gpio',
sources=['pyA13SOM/gpio/gpio_lib.c', 'pyA13SOM/gpio/gpio.c'])
module_i2c = Extension('pyA13SOM.i2c',
sources=['pyA13SOM/i2c/i2c_lib.c', 'pyA13SOM/i2c/i2c.c'])
module_spi = Extension('pyA13SOM.spi',
define_macros=[('CYTHON_IN_USE', '1')],
sources=['pyA13SOM/spi/spi_lib.c', 'pyA13SOM/spi/spi.c'])
setup(
name='pyA13SOM',
version='0.2.0',
packages=['pyA13SOM'],
# ext_modules=[module_gpio, module_i2c, module_spi],
cmdclass={'build_ext': build_ext},
ext_modules=cythonize("pyA13SOM/cython/*.pyx"),
)
树在~/mydir/
。我转到~/mydir/
并执行:python setup.py install
。
构建过程中的所有内容都可以。接下来我尝试测试import
。当我import pyA13SOM.cython.spi
时,它应该给我“Hello world”消息。确实如此。
~/mydir/$ **python -c "import pyA13SOM.cython.spi"**
Test:
Hellowwwwwwwwwww!
但是当我从另一个目录中执行此操作时:
~/someotherdir/$ **python -c "import pyA13SOM.cython.spi"**
ImportError: No module named cython.spi
知道为什么会这样吗?
答案 0 :(得分:1)
您可能需要在$ PYTHONPATH中包含新构建的.spi文件所在的目录。否则python无法找到要导入它的文件。当你在〜/ mydir /时,如果我没有弄错的话,python会搜索本地路径...
根据您使用的shell,您可以使用以下内容将〜/ mydir /目录包含在pythonpath中:
用于bash和sh shell:
PYTHONPATH=$PYTHONPATH:~/mydir/
export $PYTHONPATH
用于csh / tcsh环境:
set PYTHONPATH = ($PYTHONPATH ~/mydir/)
这两个命令将〜/ mydir /临时添加到$ PYTHONPATH。如果要永久添加路径,则必须分别将上述命令添加到〜/ .bashrc或〜/ .tcshrc。
希望这会有所帮助......