我正在尝试将数据管道制作成一个conda包。我们的想法是通过部门内部分发该包,以便快速部署。
我们的管道使用两个在常见conda渠道中不可用于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依赖项。然而,我并没有找到任何表明这不能做到的信息。
我的第一个想法:
我注意到在 meta.yaml
中的 build
下有一个 script
参数。从我所见的,大多数配方都倾向于包含以下内容:
build:
script: "{{ PYTHON }} -m pip install . --no-deps --ignore-installed"
我对这个脚本调用的内容并没有完全掌握。 这个脚本参数是否能够安装pip包? 我尝试了不同变化的以下内容,但都没有成功:
脚本: "{{ PYTHON }} -m pip install SimpleITK scitools3"
第二个想法:
能否修改bld.bat
或build.sh
文件以自动安装pip包? 当涉及到制作shell脚本或在conda-build过程中特别是何时调用这些文件时,我并不很懂。 我只知道在Windows上会调用,而在MacOS和Linux上会调用build.sh
。
第三个想法:
从我在bld.bat
和build.sh
文件中所见,会调用setup.py
文件。例如,在bld.bat
中:
"%PYTHON%" setup.py install
if errorlevel 1 exit 1
何时以及为什么在任何
conda-build
调用期间调用 setup.py
文件?setup.py
中列出的要求是否与/或安装到我正在创建的 conda 包中?另一种选择也可以通过 meta.yaml
脚本参数调用 setup.py
。再次说明,我对如何创建 conda 包的了解非常浅显。如果有更好的方法来理解 conda 制作包,请多指教。
boa
(用于conda mambabuild
)或最新的conda-build
与libmamba求解器。即使通道配置较差,构建时间也应该只需要几分钟。 - undefined