diff --git a/DEPENDS.txt b/DEPENDS.txt index e66d53cc..2130e21d 100644 --- a/DEPENDS.txt +++ b/DEPENDS.txt @@ -1,32 +1,28 @@ Build Requirements ------------------ * `Python >= 2.6 `__ -* `Numpy >= 1.6 `__ +* `Numpy >= 1.6.1 `__ * `Cython >= 0.21 `__ -* `Six >=1.3 `__ - -You can use pip to automatically install the base dependencies as follows:: - - $ pip install -r requirements.txt +* `Six >=1.4 `__ +* `SciPy >=0.9 `__ Runtime requirements -------------------- -* `SciPy `__ -* `Matplotlib `__ -* `NetworkX `__ -* `Pillow `__ - (or `PIL `__) -* `dask array `__ +* `Python >= 2.6 `__ +* `Numpy >= 1.6.1 `__ +* `SciPy >= 0.9 `__ +* `Matplotlib >= 1.1.0 `__ +* `NetworkX >= 1.8 `__ +* `Six >=1.4 `__ +* `Pillow >= 1.7.8 `__ + (or `PIL `__) +* `dask[array] >= 0.5.0 `__ -Known build errors ------------------- -On Windows, the error ``Error:unable to find vcvarsall.bat`` means that -distutils is not correctly configured to use the C compiler. Modify (or create, -if not existing) the configuration file ``distutils.cfg`` (located for -example at ``C:\Python26\Lib\distutils\distutils.cfg``) to contain:: - [build] - compiler=mingw32 +You can use pip to automatically install the runtime dependencies as follows:: + + $ pip install -r requirements.txt + Optional Requirements --------------------- diff --git a/doc/source/install.txt b/doc/source/install.txt index 555ec407..5676d1b2 100644 --- a/doc/source/install.txt +++ b/doc/source/install.txt @@ -1,53 +1,153 @@ -Pre-built installation +Installing scikit-image +----------------------- +If you are on Mac OS X you're lucky, open the terminal and install +scikit-image with pip:: + + pip install scikit-image + + +For Python 3 use pip3 instead:: + + pip3 install scikit-image + + +For other systems, please read on. + + +Linux, Mac and Windows ---------------------- +An easy light weight method to get scikit-image installed on all of the most +popular operating systems is by using miniconda_. Go over and grab the +appropriate miniconda_ version for your operating system and install it. When +you have miniconda_ installed, open a terminal and install scikit-image +with conda:: -`Windows binaries -`__ -are kindly provided by Christoph Gohlke (note that, when upgrading, -you should first uninstall any older versions). + conda install scikit-image -The latest stable release is also included as part of -`Enthought Canopy `__, -`Python(x,y) `__ and -`Anaconda `__. -On Debian and Ubuntu, a Debian package ``python-skimage`` can be found in -`the Neurodebian repository `__. Follow `the -instructions `__ to -add Neurodebian to your system package manager, then look for -``python-skimage`` in the package manager. +If you prefer *not* using miniconda, find instructions for your operating +system below. -On systems that support setuptools, the package can be installed from the -`Python packaging index `__ using -:: +Windows +------- +Scikit-image comes with the Python distributions Anaconda_, +`Enthought Canopy`_ and `Python(x,y)`_. If you install any of +them, scikit-image should already be installed. - pip install -U scikit-image +.. _Anaconda: https://store.continuum.io/cshop/anaconda/ +.. _Enthought Canopy: https://www.enthought.com/products/canopy/ +.. _Python(x,y): http://code.google.com/p/pythonxy/wiki/Welcome -Installation from source ------------------------- -Obtain the source from the git-repository at -`http://github.com/scikit-image/scikit-image -`_ by running:: +If you prefer the regular Python distribution from python.org_, you can +install scikit-image manually by downloading packages. You will need numpy_, +scipy_ and the scikit-image package. You can find the packages in `Cristoph +Gohlke's`_ web page with compiled Python packages. Here is the direct link to +the `scipy section`_, `numpy section`_ and `scikit-image section`_. Make sure +you download the right version for your system. E.g. numpy for Python 3.4 64 +bit would be ``numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl``. - git clone http://github.com/scikit-image/scikit-image.git +To install Goehlke's packages, use pip:: -in a terminal (you will need to have git installed on your machine). + pip install wheel + pip install --find-links Downloads scikit-image -If you do not have git installed, you can also download a zipball from -`https://github.com/scikit-image/scikit-image/zipball/master -`_. +Here ``--find-links Downloads`` means that pip will look for packages in the +folder named `Downloads`. Make sure that is where you saved the packages from +Goehlke. -The scikit can be installed using:: +As you see, installing scikit-image with pip requires some extra manual labor, +so using a Python distribution is recommended on Windows. - pip install . +If you have a brave soul, you can also install scikit-image on Windows by +compiling it from source:: -If you prefer, you can use it without installing, by simply adding -this path to your ``PYTHONPATH`` variable and compiling extensions -in-place:: + pip install scikit-image + + +If you experience the error ``Error:unable to find vcvarsall.bat`` it means that +distutils is not correctly configured to use the C compiler. Modify (or create, +if not existing) the configuration file ``distutils.cfg`` (located for +example at ``C:\Python26\Lib\distutils\distutils.cfg``) to contain:: + + [build] + compiler=mingw32 + +For more details on compiling in Windows, there is a lot of knowledge iterated +into the `setup of appveyor`_ (a continious integration service). + +.. _miniconda: http://conda.pydata.org/miniconda.html +.. _python.org: http://python.org/ +.. _numpy: http://www.numpy.org/ +.. _scipy: http://www.scipy.org/ +.. _Cristoph Gohlke's: http://www.lfd.uci.edu/~gohlke/pythonlibs/ +.. _numpy section: http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy +.. _scipy section: http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy +.. _scikit-image section: http://www.lfd.uci.edu/~gohlke/pythonlibs/#scikit-image +.. _setup of appveyor: https://github.com/scikit-image/scikit-image/blob/master/appveyor.yml + + +Debian and Ubuntu +----------------- +On Debian and Ubuntu install scikit-image with:: + + sudo apt-get install python-skimage + + +Or if you use Python 3:: + + sudo apt-get install python3-skimage + + +On Ubuntu scikit-image is found in the `universe repo`_, and python-skimage can +also be found in the `Neurodebian repository`_. For using the repository +follow the `Neurodebian instructions`_ to add Neurodebian to your system +package manager. + +Ubuntu 14.04 LTS ships with version 0.9.3 of scikit-image, so if you need an +up-to-date version you must compile scikit-image yourself. First install the +dependencies:: + + sudo apt-get install python-matplotlib python-numpy python-pil python-scipy + + +or for Python 3:: + + sudo apt-get install python3-matplotlib python3-numpy python3-pil python3-scipy + + +Get compilers:: + + sudo apt-get install build-essential cython + + +Compile and install the latest stable version of scikit-image:: + + pip install scikit-image + + +.. _universe repo: https://help.ubuntu.com/community/Repositories/Ubuntu +.. _Neurodebian repository: http://neuro.debian.net/ +.. _Neurodebian instructions: http://neuro.debian.net/#how-to-use-this-repository + + +Other Unixes +------------ +Install binary packages of cython, matplotlib, numpy, pillow and scipy if they +are available in your operating system's package manager. Make sure you have +a C and C++ compilers. Then install scikit-image with pip:: + + pip install scikit-image + + +Upgrading +--------- +You can upgrade scikit-image by:: + + pip install --upgrade --no-deps scikit-image + pip install scikit-image # installs new dependencies, if changed - python setup.py build_ext -i Building with bento ------------------- @@ -73,4 +173,26 @@ From the ``scikit-image`` source directory:: Depending on file permissions, the install commands may need to be run as sudo. + +Install bleeding edge development version +----------------------------------------- + +Obtain the source from the git-repository at +http://github.com/scikit-image/scikit-image by running:: + + git clone http://github.com/scikit-image/scikit-image + +If you do not have git installed on your machine, you can also download a +zipball from https://github.com/scikit-image/scikit-image/zipball/master. + +The scikit can be installed using:: + + pip install . + +If you prefer, you can use a link instead by compiling extensions in-place:: + + python setup.py build_ext -i + pip install -e . + + .. include:: ../../DEPENDS.txt diff --git a/requirements.txt b/requirements.txt index 12ce5fc6..8b97dd4b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ -cython>=0.21 matplotlib>=1.1.0 numpy>=1.6.1 -scipy>=0.9 -six>=1.3 +scipy>=0.9.0 +six>=1.4 networkx>=1.8 pillow>=1.7.8 +dask[array]>=0.5.0 diff --git a/setup.py b/setup.py index 8a938da5..b37c0fec 100644 --- a/setup.py +++ b/setup.py @@ -34,24 +34,10 @@ with open('skimage/__init__.py') as fid: with open('requirements.txt') as fid: INSTALL_REQUIRES = [l.strip() for l in fid.readlines() if l] -# development versions do not have the cythonized files -if VERSION.endswith('dev'): - SETUP_REQUIRES = [r for r in INSTALL_REQUIRES if r.startswith('cython')] -else: - INSTALL_REQUIRES = [r for r in INSTALL_REQUIRES - if not r.startswith('cython')] - SETUP_REQUIRES = [] - - -# list requirements for PyPI -REQUIRES = [r.replace('>=', ' (>= ') + ')' - for r in INSTALL_REQUIRES + SETUP_REQUIRES] +# requirements for those browsing PyPI +REQUIRES = [r.replace('>=', ' (>= ') + ')' for r in INSTALL_REQUIRES] REQUIRES = [r.replace('==', ' (== ') for r in REQUIRES] - - -# do not attempt to install numpy and scipy until they have eggs available -INSTALL_REQUIRES = [r for r in INSTALL_REQUIRES - if not r.startswith(('scipy', 'numpy'))] +REQUIRES = [r.replace('[array]', '') for r in REQUIRES] def configuration(parent_package='', top_path=None): @@ -73,9 +59,17 @@ def configuration(parent_package='', top_path=None): if __name__ == "__main__": - # purposely fail loudly if numpy or scipy are not available - from numpy.distutils.core import setup - import scipy + # purposely fail if numpy is not available + # other dependecies will be resolved by pip (install_requires) + try: + from numpy.distutils.core import setup + except ImportError: + print('To install scikit-image from source, you will need numpy.\n' + + 'Install numpy with pip:\n' + + 'pip install numpy\n' + 'Or use your operating system package manager. For more\n' + + 'details, see http://scikit-image.org/docs/stable/install.html') + sys.exit(1) setup( name=DISTNAME, @@ -105,8 +99,9 @@ if __name__ == "__main__": ], configuration=configuration, - setup_requires=SETUP_REQUIRES, install_requires=INSTALL_REQUIRES, + # install cython when running setup.py (source install) + setup_requires=['cython>=0.21'], requires=REQUIRES, packages=setuptools.find_packages(exclude=['doc']), include_package_data=True, diff --git a/skimage/io/tests/test_pil.py b/skimage/io/tests/test_pil.py index cd4e8939..e8e855d8 100644 --- a/skimage/io/tests/test_pil.py +++ b/skimage/io/tests/test_pil.py @@ -230,9 +230,9 @@ class TestSaveTIF: def roundtrip(self, dtype, x, compress): with temporary_file(suffix='.tif') as fname: if dtype == np.bool: - expected = ['low contrast'] + expected = ['low contrast|unclosed file'] else: - expected = [] + expected = ['unclosed file|\A\Z'] with expected_warnings(expected): if compress > 0: imsave(fname, x, compress=compress) diff --git a/tools/appveyor/requirements.txt b/tools/appveyor/requirements.txt index 58a4ecfa..f60a8b23 100644 --- a/tools/appveyor/requirements.txt +++ b/tools/appveyor/requirements.txt @@ -10,9 +10,8 @@ # wheels are preferred for a given version numpy==1.8.1 scipy==0.14.0 -cython==0.20.2 +cython>=0.21 matplotlib==1.4.2 pillow==2.6.1 -dask[array]>=0.5.0 wheel nose diff --git a/tools/travis_before_install.sh b/tools/travis_before_install.sh index 55e55c03..275e1ef5 100755 --- a/tools/travis_before_install.sh +++ b/tools/travis_before_install.sh @@ -1,14 +1,16 @@ #!/usr/bin/env bash set -ex -export WHEELHOUSE="--no-index --find-links=http://travis-wheels.scikit-image.org/" +export WHEELHOUSE="--no-index --trusted-host travis-wheels.scikit-image.org \ + --find-links=http://travis-wheels.scikit-image.org/" export COVERALLS_REPO_TOKEN=7LdFN9232ZbSY3oaXHbQIzLazrSf6w2pQ export PIP_DEFAULT_TIMEOUT=60 sh -e /etc/init.d/xvfb start export DISPLAY=:99.0 export PYTHONWARNINGS="all" -export TEST_ARGS="--exe --ignore-files=^_test -v --with-doctest --ignore-files=^setup.py$" - +export TEST_ARGS="--exe --ignore-files=^_test -v --with-doctest \ + --ignore-files=^setup.py$" +WHEELBINARIES="matplotlib numpy scipy pillow cython" retry () { # https://gist.github.com/fungusakafungus/1026804 @@ -27,20 +29,21 @@ retry () { return 0 } +# add build dependencies +echo "cython>=0.21" >> requirements.txt -# on Python 2.7, use the system versions of numpy, scipy, and matplotlib -# and the minimum version of cython and networkx +# test minimum requirements on 2.7 if [[ $TRAVIS_PYTHON_VERSION == 2.7* ]]; then - virtualenv --system-site-packages ~/venv - sudo apt-get install python-scipy python-matplotlib python-imaging - sed -i 's/cython>=/cython==/g' requirements.txt - sed -i 's/networkx>=/networkx==/g' requirements.txt - sed -i '/pillow/d' requirements.txt -else - virtualenv -p python --system-site-packages ~/venv + sed -i 's/>=/==/g' requirements.txt + # PIL instead of Pillow + sed -i 's/pillow.*/pil==1.1.7/g' requirements.txt + WHEELBINARIES=${WHEELBINARIES/pillow/pil} fi +# create new empty venv +virtualenv -p python ~/venv source ~/venv/bin/activate + retry pip install wheel flake8 coveralls nose # install system tk for matplotlib @@ -49,12 +52,16 @@ sudo apt-get install python-tk # on Python 3.2, use matplotlib 1.3.1 if [[ $TRAVIS_PYTHON_VERSION == 3.2 ]]; then - sed -i 's/matplotlib>=*.*.*/matplotlib==1.3.1/g' requirements.txt + sed -i 's/matplotlib>=.*/matplotlib==1.3.1/g' requirements.txt fi -retry pip install $WHEELHOUSE -r requirements.txt +# install wheels +for requirement in $WHEELBINARIES; do + WHEELS="$WHEELS $(grep $requirement requirements.txt)" +done +retry pip install $WHEELHOUSE $WHEELS -pip install 'dask[array]>=0.5.0' +retry pip install -r requirements.txt # clean up disk space sudo apt-get clean