Добавление требований к "запуску" или "хосту" не удается conda-build - PullRequest
1 голос
/ 06 августа 2020

Я использую conda-build для сборки пакета conda из исходного кода python и получаю следующую ошибку всякий раз, когда я добавляю что-то в подразделы «run» или «host» раздела «requirements» в meta.yaml:

Tests failed for my_package-0.1.0-0.tar.bz2 - moving package to /home/ec2-user/anaconda3/conda-bld/broken

Удаление подразделов «run» и «host» делает тестовый запуск прекрасным - встроенный файл tar.bz2 устанавливается без проблем, и импорт выполняется успешно. Добавление подраздела "build" работает нормально. Запуск с флагом --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 в проекте root.

По какой-то причине тестовый скрипт даже не запускается (файл /tmp/test_ran.txt не создается)! Как упоминалось выше, удаление подраздела «run» делает тестовый запуск нормальным, включая импорт.

Заранее благодарим. Кто-нибудь может помочь? С ума сойти ...

Ответы [ 2 ]

1 голос
/ 12 августа 2020

Я не уверен, было ли это связано с моей конкретной настройкой, но на случай, если у кого-то такая же проблема:

Проблема заключалась в ошибке, возникшей в одном из вложенных скриптов, запущенных conda- построить. В частности, 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'

Так как keras не был указан нигде в моем meta.yaml, импорт завершился неудачно, что привело к завершению conda-build (с бесполезной ошибкой «тесты не пройдены»). Добавление keras в раздел test.requires в meta.yaml устранило проблему. Я не знаю, почему conda-build пытался активировать keras, это могло быть связано с моей настройкой.

1 голос
/ 08 августа 2020

Когда вы удаляете разделы host и run, вы пропускаете python из сред, используемых в процессе сборки / тестирования. Следовательно, единственный оставшийся python на вашем PATH - это системный интерпретатор (или, может быть, какой-то другой python, который оказывается на вашем PATH).

Это То есть вы случайно используете систему python на этапе сборки и снова на этапе тестирования:

  • Ваша команда сборки (python setup.py install ...) будет использовать системный интерпретатор, если python не существует в host или build средах.

  • Точно так же ваш run_script.sh скрипт также будет использовать системный интерпретатор, но он проходит - - ваш шаг сборки установил пакет в системный интерпретатор!

ОК, поэтому вам определенно нужно сохранить разделы host и run в meta.yaml, а затем выяснить как добиться прохождения тестов в правильной среде. Но трудно понять, почему ваши тесты терпят неудачу, поскольку вы не опубликовали никакой информации о том, почему тесты терпят неудачу.

Вместо 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 использовала во время сбоя.

...