Nil*_*nsó 10 python pip anaconda conda conda-build
我正在尝试从数据管道中制作一个 conda 包。我们的想法是通过我们的部门在本地分发软件包以进行快速部署。
我们的管道使用了常见 conda 通道中不适用于 Windows 的 2 个软件包:SimpleITK 和 scitools3。在使用所有其他 conda 包依赖项创建 conda 环境后,我们通常会通过 pip 安装这两个包。
我制作了以下 conda 包配方meta.yaml:
{% set name = "package_name" %}
{% set version = "1.0.0" %}
package:
name: "{{ name|lower }}"
version: "{{ version }}"
source:
path: ..
build:
number: 0
script: "{{ PYTHON }} -m pip install . --no-deps --ignore-installed -vvv"
entry_points:
- cmr = package_name.api.cli.command_line_interface_segmentation:main
- cupdate = package_name.api.cli.continuous_update:parse_and_run
requirements:
host:
- python
- pip
run:
- python=3.7.4
- tensorflow-gpu=2.1
- pyqt
- opencv=4.1 # conda install -c conda-forge opencv
- pyyaml
- scikit-image
- scikit-learn
- tqdm
- deprecated
- tabulate
- pandas
- xlsxwriter
- h5py=2.10
- psutil # for memory profiling
- pympler # form memory profiling
# - SimpleITK==1.2.4 # When this is commented, the package builds
- xnat==0.3.18
# - scitools3>=1.0 # When this is commented, the package builds
test:
imports:
- package_name
about:
summary: 'Repository for processing data and training models.'
Run Code Online (Sandbox Code Playgroud)
我们的存储库结构如下所示:
/package-name
/conda.recipe
bld.bat
build.sh
meta.yaml
/package_name
/api
/cli
command_line_interface_segmentation.py
continuous_update.py
...
/other_package_code
requirements.txt
setup.py
Run Code Online (Sandbox Code Playgroud)
然后我通过终端构建 conda 包:
conda-build package-name
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否可以通过 conda 配方安装 pip 包依赖项?
我尝试阅读所有官方文档、来自 conda-forge 的示例食谱以及各个网站上的问题。我遇到的大多数人都提到这将是一个很好的功能,但没有对 pip 依赖项的直接支持。但是,我没有找到任何信息表明这不能完成。
我注意到inscript下有一个参数。据我所知,大多数食谱往往包含以下内容:buildmeta.yaml
build:
script: "{{ PYTHON }} -m pip install . --no-deps --ignore-installed"
Run Code Online (Sandbox Code Playgroud)
我不完全了解这个脚本调用正在做什么。可以通过此脚本参数以某种方式安装 pip 软件包吗? 我尝试了以下不同的变体,但没有成功:
script: "{{ PYTHON }} -m pip install SimpleITK scitools3"
可以修改bld.bat或build.sh来自动安装 pip 包吗?在制作 shell 脚本或在 conda-build 过程中具体调用这些文件时,我不太了解。我所知道的是bld.bat在 Windows 中调用,build.sh在 MacOS 和 Linux 中调用。
bld.bat从我在和文件中看到的内容来看build.sh,该setup.py文件被调用。例如在bld.bat:
"%PYTHON%" setup.py install
if errorlevel 1 exit 1
Run Code Online (Sandbox Code Playgroud)
setup.py在调用过程中的任何时刻,何时以及为何调用该文件conda-build?中列出的要求是否会setup.py在任何时候与我正在创建的 conda 包一起安装/安装到其中?。setup.py另一种选择还可以是通过脚本参数进行调用meta.yaml。
同样,我对 conda 包是如何创建的理解相当肤浅。任何关于如何更好地理解 conda 包制作的指示将不胜感激。
人们不应该这样做。OP 的提议本质上会破坏 Conda 包管理系统。想象一下,您确实设法做到了这一点,然后有人创建了同一包的 Conda 版本。现在,您的包将悄悄地破坏 Conda 试图显式管理的内容,从而导致潜在的不稳定或至少是不同步的状态。
如果您希望构建的包具有尚未成为 Conda 系统一部分的依赖项,则需要首先将非 Conda 包转换为 Conda 包。对于 PyPI 中的包,这可以通过 大大简化conda skeleton pypi,常见的做法是为包创建 Conda Forge 配方。现在该grayskull工具进一步简化了这一过程。
对于 SimpleITK 包,已经有 Conda Forge feedstock,只是它们不是为 Windows 构建的。这可能是一个简单的问题,原料维护人员不在 Windows 上工作,在这种情况下,他们可能会非常乐意将您或您的同事添加为共同维护人员来处理该部分。考虑向他们提出问题或直接联系维护人员了解您对win-64版本的兴趣。
| 归档时间: |
|
| 查看次数: |
5278 次 |
| 最近记录: |