我使用
ssstack
创建了一个名为 conda build
的纯 python conda 包,但是当我使用以下命令安装它(从本地构建目录)时:
conda create -n <env name> -c <path to local build> ssstack`
python 包和 CLI 可执行文件放置在错误的位置。而不是将 python 包放入:
<ENV_ROOT>/lib/python3.12/site-packages/ssstack
它错误地将它们放在环境的根目录中,即:
<ENV_ROOT>/site-packages/ssstack
它还将 python CLI 脚本放在错误的位置;而不是被放入
<ENV_ROOT>/bin/ssstack
它最终被留在:
<ENV_ROOT>/python-scripts/ssstack
很明显,使用环境时找不到python模块和CLI脚本。
这几乎就像 conda 不知道它是一个 python 包,所以不会将其放在
lib/python3.xx
目录下。
奇怪的是,如果我先创建一个仅安装 python 的新环境,然后激活它并将
ssstack
包安装到现有环境中,那么所有东西都会放在正确的位置,即:
conda create -n ssstack_env python==3.12
conda activate ssstack_env
conda install -c <path to local build> ssstack ## WORKS!
我一生都无法理解为什么后一种方法可以正确工作,而前一种方法却不能。
我花了很多时间寻找原因,但一无所获。任何建议将不胜感激!
这是我的
meta.yaml
食谱供参考:
{% set name = "ssstack" %}
{% set version = "0.4.0" %}
package:
name: "{{ name|lower }}"
version: "{{ version }}"
source:
path: ../../..
build:
noarch: python
number: 1
script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation
requirements:
host:
- pip
- python>=3.8
- setuptools
run:
- conda
- conda-lock
- packaging
- pydantic
- pyyaml
- requests
- tabulate
- tqdm
- typer
好吧 - 经过许多令人沮丧的小时后,我终于自己解决了这个问题。
问题是
python
作为 requirements: -> run:
中的依赖项缺失,即:
requirements:
run:
- python
如果没有这个 conda 似乎不会意识到它是一个 python 包,并且不会将
site-packages
和 CLI 脚本放在正确的位置。
这一定是 conda 在某个时候的行为发生了变化,因为据我所知这个配方曾经工作得很好。
附注提醒我这一点的是生成的 conda 包的构建版本缺少
_py
部分。