1

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

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

conda install -c nicolashug scikit-surprise 

只需运行即可编译扩展

python setup.py install

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

据我了解,仅当我使用以下命令构建conda包setup.py时才会调用此命令: meta.yaml 文件(使用创建的)包含conda buildconda skeleton

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

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

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

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

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

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

4

1 回答 1

3

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

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

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

于 2017-10-26T15:25:33.527 回答