我正在尝试从数据管道中制作一个 conda 包。这个想法是通过我们的部门在本地分发包以便快速部署。
我们的管道在常见的 conda 渠道中使用了 2 个不适用于 Windows 的包: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.'
我们的存储库结构如下所示:
/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
然后我通过我的终端构建 conda 包:
conda-build package-name
我的问题是,是否可以通过 conda 配方安装 pip 包依赖项?
我已经尝试阅读所有官方文档、来自 conda-forge 的示例食谱以及各种网站上的问题。我经常遇到有人提到这将是一个不错的功能,但没有直接支持 pip 依赖项。但是,我没有遇到任何表明无法做到这一点的信息。
我的第一个想法:
我注意到in下有一个script
参数。据我所见,大多数食谱往往包含以下内容:build
meta.yaml
build:
script: "{{ PYTHON }} -m pip install . --no-deps --ignore-installed"
我没有完全掌握这个脚本调用在做什么。可以通过此脚本参数以某种方式安装 pip 包吗? 我尝试了以下不同的变体,但没有成功:
script: "{{ PYTHON }} -m pip install SimpleITK scitools3"
第二个想法:
可以修改bld.bat
orbuild.sh
以自动安装 pip 包吗?在制作 shell 脚本或在 conda-build 过程中特别调用这些文件时,我不太了解。我所知道的是它bld.bat
在 Windowsbuild.sh
中被调用,在 MacOS 和 Linux 中被调用。
第三个想法:
从我在bld.bat
andbuild.sh
文件中可以看到,该setup.py
文件被调用。例如在bld.bat
:
"%PYTHON%" setup.py install
if errorlevel 1 exit 1
setup.py
在调用过程中的任何时间点何时以及为何调用该文件conda-build
?setup.py
是否在我正在创建的 conda 包旁边/中的任何时候安装了中列出的要求?. 另一种选择也可以是setup.py
通过meta.yaml
脚本参数调用。
同样,我对如何创建 conda 包的理解非常浅薄。任何关于如何更好地理解 conda 包制作的指针将不胜感激。