如何在使用Cython的项目中运行nosetests

1 投票
1 回答
505 浏览
提问于 2025-04-17 21:02

我有一个项目结构如下:

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,然后你就可以导入这个文件了。

撰写回答