所以我发布了一个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一样?
答案 0 :(得分:2)
据我所知,安装conda软件包时无法在用户的机器上进行编译。实际上,conda软件包的整个想法是你进行编译,这样我就不必在我的机器上进行编译,所有分发的都是编译库。特别是在Windows上,设置编译器以便它们正常工作(使用Python)是一个很大的PITA,这是conda(以及由pip安装的轮子)的最大原因之一。
如果您无法直接访问特定操作系统,则可以使用持续集成(CI)服务,例如Appveyor(Windows),Travis CI(Linux / macOS)或CircleCI(Linux / macOS)构建软件包并将它们上传到Anaconda云(或者就此问题上传到PyPI)。这些服务直接与GitHub和其他代码共享服务集成,对于FOSS项目通常是免费的。这样,您可以在每个提交,每个标记或您想要的其他变体上构建包。
最后,您可以通过设置这些服务来节省更多时间,因为您不必为无法从PyPI安装源包的用户提供编译器支持。