Scipy ImportError на travis-ci
Я впервые создаю Travis-CI. Я устанавливаю scipy в том, что я считаю стандартным способом:
language: python
python:
- "2.7"
# command to install dependencies
before_install:
- sudo apt-get -qq update
- sudo apt-get -qq install python-numpy python-scipy python-opencv
- sudo apt-get -qq install libhdf5-serial-dev hdf5-tools
install:
- "pip install numexpr"
- "pip install cython"
- "pip install -r requirements.txt --use-mirrors"
# command to run tests
script: nosetests
Все строит. Но когда начинаются носеты, я получаю
ImportError: No module named scipy.ndimage
Обновление: Вот более непосредственная демонстрация проблемы.
$ sudo apt-get install python-numpy python-scipy python-opencv
$ python -c 'import scipy'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named scipy
The command "python -c 'import scipy'" failed and exited with 1 during install.
Я попробовал установить scipy, используя pip. Сначала я попытался установить gfortran. Вот пример неудачной сборки. Любые предложения?
Другое обновление. С тех пор Трэвис добавил официальную документацию по использованию конды с Travis. См. Ответ ostrokach.
Ответы
Ответ 1
Я нашел два способа преодоления этой трудности:
-
Как предложил @unutbu, создайте свою собственную виртуальную среду и установите все, используя pip внутри этой среды. Я получил сборку, но установка scipy из исходного файла происходит очень медленно.
-
Следуя подходу, используемому проектом pandas в этом файле .travis.yml и сценариях оболочки, которые он вызывает, force travis для использования общесистемных пакетов сайтов и установки numpy и scipy с помощью apt-get. Это намного быстрее. Ключевыми строками являются
virtualenv:
system_site_packages: true
в travis.yml перед группой before_install
, за которой следуют эти команды оболочки
SITE_PKG_DIR=$VIRTUAL_ENV/lib/python$TRAVIS_PYTHON_VERSION/site-packages
rm -f $VIRTUAL_ENV/lib/python$TRAVIS_PYTHON_VERSION/no-global-site-packages.txt
а затем, наконец,
apt-get install python-numpy
apt-get install python-scipy
который будет найден, когда nosetests попытаются импортировать их.
Обновление
Теперь я предпочитаю сборку на основе conda, которая быстрее, чем любая из вышеприведенных стратегий. Вот один пример в проекте, который я поддерживаю.
Ответ 2
Это описано в официальной документации по conda: Использование conda с Travis CI.
Файл .travis.yml
Ниже показано, как изменить файл .travis.yml
для использования Miniconda для проекта, который поддерживает Python 2.6, 2.7, 3.3, и 3.4.
ПРИМЕЧАНИЕ. См. веб-сайт Travis CI для получения информации о базовой конфигурации для Travis.
language: python
python:
# We don't actually use the Travis Python, but this keeps it organized.
- "2.6"
- "2.7"
- "3.3"
- "3.4"
install:
- sudo apt-get update
# We do this conditionally because it saves us some downloading if the
# version is the same.
- if [[ "$TRAVIS_PYTHON_VERSION" == "2.7" ]]; then
wget https://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh;
else
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh;
fi
- bash miniconda.sh -b -p $HOME/miniconda
- export PATH="$HOME/miniconda/bin:$PATH"
- hash -r
- conda config --set always_yes yes --set changeps1 no
- conda update -q conda
# Useful for debugging any issues with conda
- conda info -a
# Replace dep1 dep2 ... with your dependencies
- conda create -q -n test-environment python=$TRAVIS_PYTHON_VERSION dep1 dep2 ...
- source activate test-environment
- python setup.py install
script:
# Your test script goes here
Ответ 3
Я нашел этот подход для работы:
http://danielnouri.org/notes/2012/11/23/use-apt-get-to-install-python-dependencies-for-travis-ci/
Добавьте эти строки в конфигурацию Travis, чтобы использовать virtualenv
с --system-site-packages
:
virtualenv:
system_site_packages: true
Таким образом, вы можете установить пакеты Python через apt-get
в разделе before_install
и использовать их в своем virtualenv:
before_install:
- sudo apt-get install -qq python-numpy python-scipy
Реальное использование этого подхода можно найти в nolearn.
Ответ 4
Как отметил Дэн Аллан в своем обновлении, он теперь предпочитает сборку на базе конды. Вот вам данность Дан Бланшар, дающая полный пример файла .travis.yml
, который предварительно установит scipy на тестовой машине:
language: python
python:
- 2.7
- 3.3
notifications:
email: false
# Setup anaconda
before_install:
- wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh
- chmod +x miniconda.sh
- ./miniconda.sh -b
- export PATH=/home/travis/miniconda/bin:$PATH
- conda update --yes conda
# The next couple lines fix a crash with multiprocessing on Travis and are not specific to using Miniconda
- sudo rm -rf /dev/shm
- sudo ln -s /run/shm /dev/shm
# Install packages
install:
- conda install --yes python=$TRAVIS_PYTHON_VERSION atlas numpy scipy matplotlib nose dateutil pandas statsmodels
# Coverage packages are on my binstar channel
- conda install --yes -c dan_blanchard python-coveralls nose-cov
- python setup.py install
# Run test
script:
- nosetests --with-cov --cov YOUR_PACKAGE_NAME_HERE --cov-config .coveragerc --logging-level=INFO
# Calculate coverage
after_success:
- coveralls --config_file .coveragerc