安装时构建conda包

时间:2017-10-25 09:37:29

标签: python build install cython conda

所以我发布了一个conda包(link)。

此软件包包含.c扩展名(来自cython代码),需要在安装软件包时进行编译。我的问题是在运行安装命令

时没有编译任何扩展
conda install -c nicolashug scikit-surprise 

只需运行

即可完成扩展程序的编译
python setup.py install

这正是pip的作用。该软件包在PyPI上运行正常。

据我所知,这个setup.py命令仅在我使用conda build 构建 conda包时调用:meta.yaml文件(使用{{1创建)包含

conda skeleton

但是我需要在安装的包时完成此操作,而不是构建。

阅读conda docs,看起来安装过程只是复制文件的问题:

  

将conda软件包的文件安装到环境中可以被认为是将目录更改为环境,然后下载并解压缩.zip文件及其依赖项

这意味着我必须为所有平台和架构构建软件包,然后将它们上传到conda ......这对我来说是不可能的。

那么,有没有办法在安装时构建软件包,就像pip一样?

1 个答案:

答案 0 :(得分:2)

据我所知,安装conda软件包时无法在用户的机器上进行编译。实际上,conda软件包的整个想法是进行编译,这样我就不必在我的机器上进行编译,所有分发的都是编译库。特别是在Windows上,设置编译器以便它们正常工作(使用Python)是一个很大的PITA,这是conda(以及由pip安装的轮子)的最大原因之一。

如果您无法直接访问特定操作系统,则可以使用持续集成(CI)服务,例如Appveyor(Windows),Travis CI(Linux / macOS)或CircleCI(Linux / macOS)构建软件包并将它们上传到Anaconda云(或者就此问题上传到PyPI)。这些服务直接与GitHub和其他代码共享服务集成,对于FOSS项目通常是免费的。这样,您可以在每个提交,每个标记或您想要的其他变体上构建包。

最后,您可以通过设置这些服务来节省更多时间,因为您不必为无法从PyPI安装源包的用户提供编译器支持。