如何在使用Cython的项目中运行nosetests
我有一个项目结构如下:
pgmpy/
|-- pgmpy
| |-- BayesianModel
| | |-- BayesianModel.py
| | |-- __init__.py
| |-- Exceptions
| | |-- Exceptions.py
| | |-- __init__.py
| |-- Factor
| | |-- CPD.py
| | |-- _factor_product.c
| | |-- _factor_product.pyx
| | |-- Factor.py
| | |-- __init__.py
| |-- Independencies
| | |-- Independencies.py
| | |-- __init__.py
| |-- __init__.py
| |-- MarkovModel
| | |-- __init__.py
| | |-- MarkovModel.py
| |-- readwrite
| | |-- __init__.py
| | |-- ProbModelXML.py
| `-- tests
| |-- help_functions.py
| |-- test_BayesianModel.py
| `-- test_Independencies.py
`-- setup.py
在Factor文件夹里有一个.pyx文件。当我用setup.py安装pgmpy时,它会通过Cython编译这个文件,并在Python的dist-packages目录下生成一个共享对象文件。但是,由于这个共享对象文件不在项目目录里,从这个目录运行nosetests
时会出现错误,提示无法导入Cython文件。而从其他目录运行nosetests就没有问题。
我该怎么做才能确保nosetests也能从项目目录运行呢?
1 个回答
2
我看了你的项目,建议你把setup
的导入从distutils.core
改成setuptools
。因为distutils
没有提供像python setup.py develop
这样的有用功能。这样做的话,它会把.so文件构建到pgmpy/Factor/_factor_product.cpython-33m.so
,然后你就可以导入这个文件了。