使用Conda Build的Cython Python程序

时间:2014-10-25 14:43:38

标签: python build cython conda

我正在尝试使用" conda build fibtestpackage"来构建一个包。命令。

" fibtestpackage"是使用Cython构建的,因此在.sh文件中我有命令:

python setup.py build_ext --inplace

即使Build成功结束,输出也符合预期:


获取包裹...... fibtestpackage-1.0.0 100%| ################################时间:0:00:00 3.03 MB / s

提取包... [完整] | ###################################### ############ | 100%

链接包... [完整] | ############################################### #### | 100%


我在YAML文件中的一个测试失败了。我唯一的测试看起来像这样:


test:
  # Python imports
  imports:
      - fibtestpackage
      #- numpy
      #- samplers

因此,它是一个导入错误,

ImportError:没有名为fibtestpackage的模块

我对导入错误的原因的第一个猜测是因为构建生成的.SO,.C和.PYX文件(以及库的其他文件)没有放入anaconda / lib / python2。 7 /其他模块所在的site-packages /文件夹。我是否需要在shell文件中指定它,或者是否应该包含在" python setup.py build_ext --inplace"命令?

我的第二个猜测是分布中有两个不同版本的conda(更新后),

1)Python 2.7.8 | Anaconda 2.1.0(64位)| (默认,2014年8月21日,18:22:21)

2)Python 2.7.8 | Continuum Analytics,Inc。| (默认,2014年8月21日,18:22:21)

这会导致这个问题吗?也许构建环境是在错误的库中安装库?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

Conda构建创建一个构建conda环境,称为_build(通常在〜/ anaconda / envs / _build中),这是你应该安装所有内容的地方。对于Python,通常做python setup.py install是好的如果在meta.yaml中包含Python作为构建依赖项,那就足够了,因为python将是_build环境中安装的那个,它将安装在那里。

在构建结束时,conda build会在构建环境中包装所有新文件,并从中创建一个conda包。如果存在测试阶段,则会删除_build环境并创建一个名为_test的测试环境,并在那里安装并运行该程序包。

要调试此问题,请尝试在〜/ anaconda / envs / _test中运行Python。

在您的情况下,问题可能是python setup.py build_ext --inplace实际上没有安装文件,它只是构建它们。检查构建结束时查看它所说的文件数量。如果有0,则问题就在于此。