安装后构建 conda 包

Build conda package upon installation

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

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

时编译的
conda install -c nicolashug scikit-surprise 

只需运行

即可编译扩展
python setup.py install

这正是 pip 的作用。该软件包在 PyPI 上并且工作正常。

据我了解,此 setup.py 命令仅在我 使用 conda build 构建 conda 包时调用: meta.yaml文件(使用 conda skeleton 创建)包含

build:
    script: python setup.py install  --single-version-externally-managed--record=record.txt

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

阅读 conda docs,安装过程似乎只是复制文件的问题:

Installing the files of a conda package into an environment can be thought of as changing the directory to an environment, and then downloading and extracting the .zip file and its dependencies

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

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

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

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

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