向 "run" 或 "host" 添加要求失败 conda-build
Adding requirements to "run" or "host" fails conda-build
我正在使用 conda-build 从 python 源代码构建一个 conda 包,每当我向“运行”或“主机”添加内容时,我都会收到以下错误" meta.yaml 中“要求”部分的小节:
Tests failed for my_package-0.1.0-0.tar.bz2 - moving package to /home/ec2-user/anaconda3/conda-bld/broken
删除“运行”和“主机”小节使测试 运行 正常 - 构建的 tar.bz2 文件安装没有问题,导入成功。添加“构建”小节效果很好。
运行 --debug 标志没有添加任何有用的信息。我该如何调试它??
这是我的 meta.yaml:
package:
name: my_package
version: 0.1.0
source:
path: ..
build:
script: "python setup.py install --single-version-externally-managed --record=record.txt --verbose"
requirements:
# removing this subsection makes everything work
run:
- python
这是我的 run_test.sh(使用 run_test.py 产生相同的结果):
echo 'test is running' > /tmp/test_ran.txt
python -c "import my_package; print('Success!')" >> /tmp/test_ran.txt
这是我的 setup.py:
from setuptools import find_packages, setup
setup(
name='my_package',
version='0.1.0',
packages=find_packages()
)
meta.yaml 和 run_test.sh 脚本位于项目根目录下的 conda.recipe
子文件夹中。
出于某种原因,测试脚本甚至没有 运行(文件 /tmp/test_ran.txt 未创建)!如上所述,删除“运行”小节可以使测试 运行 正常,包括导入。
提前致谢。有人可以帮忙吗?对此感到疯狂...
当您删除 host
和 run
部分时,您将从 build/test 过程中使用的环境中删除 python
。因此,您的 PATH
上唯一剩下的 python
是 系统 解释器(或者可能是您的 [= 上恰好可用的其他 python
15=]).
也就是说,您在构建阶段不小心使用了 系统 python,并在测试阶段再次使用:
如果 host
或 build
环境中不存在 python,您的构建命令 (python setup.py install ...
) 将使用系统解释器。
同样,您的 run_script.sh
脚本也将使用系统解释器,但它通过了 -- 您的构建步骤将包安装到系统解释器中!
好的,所以您肯定需要保留 meta.yaml
中的 host
和 run
部分,然后弄清楚如何让测试在正确的环境中通过。但是很难知道为什么你的测试失败了,因为你没有 post 任何关于为什么测试失败的信息。
而不是 run_test.sh
,最简单的完整性检查是将一些测试导入添加到 meta.yaml
:
package:
name: my_package
version: 0.1.0
source:
path: ..
build:
# BTW, I recommend using {{ PYTHON }} here -- avoid the system interpreter!
script: "{{ PYTHON }} setup.py install --single-version-externally-managed --record=record.txt --verbose"
requirements:
host:
- python
run:
- python
# Add this section!
test:
imports:
- my_package
至少通过了吗?如果不是,请检查 conda-build 在失败时使用的临时测试环境。
我不确定这是否是我的特定设置造成的,但如果其他人遇到同样的问题:
问题是 conda-build 在其中一个嵌套脚本 运行 中抛出了一个错误。具体来说,conda 创建并激活 conda 环境,在该环境中 运行 测试,并且由于某种原因,我系统上 conda env 的激活包括 Keras 的激活。来自 xtrace,就在 conda-build 报告测试失败之前:
++++ . /home/my_user/anaconda3/etc/conda/activate.d/keras_activate.sh
++++++ python /home/my_user/anaconda3/etc/keras/load_config.py
+++++ KERAS_BACKEND=tensorflow
+++++ python -c 'import keras'
+++++ test true
+++++ export KERAS_BACKEND=theano
+++++ KERAS_BACKEND=theano
+++++ python -c 'import keras'
由于在我的 meta.yaml 中的任何地方都没有指定 keras,导入失败,导致 conda-build 退出(出现“测试失败”的无用错误)。在 meta.yaml 中的“test.requires”部分下添加 keras 解决了这个问题。我不知道为什么 conda-build 试图激活 keras,这可能是我的设置所特有的。
我正在使用 conda-build 从 python 源代码构建一个 conda 包,每当我向“运行”或“主机”添加内容时,我都会收到以下错误" meta.yaml 中“要求”部分的小节:
Tests failed for my_package-0.1.0-0.tar.bz2 - moving package to /home/ec2-user/anaconda3/conda-bld/broken
删除“运行”和“主机”小节使测试 运行 正常 - 构建的 tar.bz2 文件安装没有问题,导入成功。添加“构建”小节效果很好。 运行 --debug 标志没有添加任何有用的信息。我该如何调试它??
这是我的 meta.yaml:
package:
name: my_package
version: 0.1.0
source:
path: ..
build:
script: "python setup.py install --single-version-externally-managed --record=record.txt --verbose"
requirements:
# removing this subsection makes everything work
run:
- python
这是我的 run_test.sh(使用 run_test.py 产生相同的结果):
echo 'test is running' > /tmp/test_ran.txt
python -c "import my_package; print('Success!')" >> /tmp/test_ran.txt
这是我的 setup.py:
from setuptools import find_packages, setup
setup(
name='my_package',
version='0.1.0',
packages=find_packages()
)
meta.yaml 和 run_test.sh 脚本位于项目根目录下的 conda.recipe
子文件夹中。
出于某种原因,测试脚本甚至没有 运行(文件 /tmp/test_ran.txt 未创建)!如上所述,删除“运行”小节可以使测试 运行 正常,包括导入。
提前致谢。有人可以帮忙吗?对此感到疯狂...
当您删除 host
和 run
部分时,您将从 build/test 过程中使用的环境中删除 python
。因此,您的 PATH
上唯一剩下的 python
是 系统 解释器(或者可能是您的 [= 上恰好可用的其他 python
15=]).
也就是说,您在构建阶段不小心使用了 系统 python,并在测试阶段再次使用:
如果
host
或build
环境中不存在 python,您的构建命令 (python setup.py install ...
) 将使用系统解释器。同样,您的
run_script.sh
脚本也将使用系统解释器,但它通过了 -- 您的构建步骤将包安装到系统解释器中!
好的,所以您肯定需要保留 meta.yaml
中的 host
和 run
部分,然后弄清楚如何让测试在正确的环境中通过。但是很难知道为什么你的测试失败了,因为你没有 post 任何关于为什么测试失败的信息。
而不是 run_test.sh
,最简单的完整性检查是将一些测试导入添加到 meta.yaml
:
package:
name: my_package
version: 0.1.0
source:
path: ..
build:
# BTW, I recommend using {{ PYTHON }} here -- avoid the system interpreter!
script: "{{ PYTHON }} setup.py install --single-version-externally-managed --record=record.txt --verbose"
requirements:
host:
- python
run:
- python
# Add this section!
test:
imports:
- my_package
至少通过了吗?如果不是,请检查 conda-build 在失败时使用的临时测试环境。
我不确定这是否是我的特定设置造成的,但如果其他人遇到同样的问题:
问题是 conda-build 在其中一个嵌套脚本 运行 中抛出了一个错误。具体来说,conda 创建并激活 conda 环境,在该环境中 运行 测试,并且由于某种原因,我系统上 conda env 的激活包括 Keras 的激活。来自 xtrace,就在 conda-build 报告测试失败之前:
++++ . /home/my_user/anaconda3/etc/conda/activate.d/keras_activate.sh
++++++ python /home/my_user/anaconda3/etc/keras/load_config.py
+++++ KERAS_BACKEND=tensorflow
+++++ python -c 'import keras'
+++++ test true
+++++ export KERAS_BACKEND=theano
+++++ KERAS_BACKEND=theano
+++++ python -c 'import keras'
由于在我的 meta.yaml 中的任何地方都没有指定 keras,导入失败,导致 conda-build 退出(出现“测试失败”的无用错误)。在 meta.yaml 中的“test.requires”部分下添加 keras 解决了这个问题。我不知道为什么 conda-build 试图激活 keras,这可能是我的设置所特有的。