From ba945beda909d6ddae3ce54712f9af1a01584156 Mon Sep 17 00:00:00 2001 From: Stefan van der Walt Date: Fri, 29 May 2015 10:54:06 -0700 Subject: [PATCH] Revert "Update install instructions, simplify requirements" --- DEPENDS.txt | 38 ++++--- doc/source/install.txt | 190 ++++++-------------------------- requirements.txt | 6 +- setup.py | 37 ++++--- skimage/io/tests/test_pil.py | 4 +- tools/appveyor/requirements.txt | 3 +- tools/travis_before_install.sh | 37 +++---- 7 files changed, 98 insertions(+), 217 deletions(-) diff --git a/DEPENDS.txt b/DEPENDS.txt index 2130e21db2a..e66d53cc23f 100644 --- a/DEPENDS.txt +++ b/DEPENDS.txt @@ -1,28 +1,32 @@ Build Requirements ------------------ * `Python >= 2.6 `__ -* `Numpy >= 1.6.1 `__ +* `Numpy >= 1.6 `__ * `Cython >= 0.21 `__ -* `Six >=1.4 `__ -* `SciPy >=0.9 `__ +* `Six >=1.3 `__ -Runtime requirements --------------------- -* `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 `__ - - -You can use pip to automatically install the runtime dependencies as follows:: +You can use pip to automatically install the base dependencies as follows:: $ pip install -r requirements.txt +Runtime requirements +-------------------- +* `SciPy `__ +* `Matplotlib `__ +* `NetworkX `__ +* `Pillow `__ + (or `PIL `__) +* `dask array `__ + +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 Optional Requirements --------------------- diff --git a/doc/source/install.txt b/doc/source/install.txt index 5676d1b25c7..555ec4073c5 100644 --- a/doc/source/install.txt +++ b/doc/source/install.txt @@ -1,153 +1,53 @@ -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 +Pre-built installation ---------------------- -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:: - - conda install scikit-image - - -If you prefer *not* using miniconda, find instructions for your operating -system below. - - -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. - -.. _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 - - -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``. - -To install Goehlke's packages, use pip:: - - pip install wheel - pip install --find-links Downloads scikit-image - -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. - -As you see, installing scikit-image with pip requires some extra manual labor, -so using a Python distribution is recommended on Windows. - -If you have a brave soul, you can also install scikit-image on Windows by -compiling it from source:: - - 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 +`Windows binaries +`__ +are kindly provided by Christoph Gohlke (note that, when upgrading, +you should first uninstall any older versions). +The latest stable release is also included as part of +`Enthought Canopy `__, +`Python(x,y) `__ and +`Anaconda `__. -Or if you use Python 3:: +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. - sudo apt-get install python3-skimage +On systems that support setuptools, the package can be installed from the +`Python packaging index `__ using +:: -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. + pip install -U scikit-image -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:: +Installation from source +------------------------ - 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 +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.git -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:: +in a terminal (you will need to have git installed on your machine). - pip install 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 +`_. +The scikit can be installed using:: -Upgrading ---------- -You can upgrade scikit-image by:: + pip install . - pip install --upgrade --no-deps scikit-image - pip install scikit-image # installs new dependencies, if changed +If you prefer, you can use it without installing, by simply adding +this path to your ``PYTHONPATH`` variable and compiling extensions +in-place:: + python setup.py build_ext -i Building with bento ------------------- @@ -173,26 +73,4 @@ 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 8b97dd4bee8..12ce5fc6255 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.0 -six>=1.4 +scipy>=0.9 +six>=1.3 networkx>=1.8 pillow>=1.7.8 -dask[array]>=0.5.0 diff --git a/setup.py b/setup.py index b37c0fec416..8a938da5ef2 100644 --- a/setup.py +++ b/setup.py @@ -34,10 +34,24 @@ with open('requirements.txt') as fid: INSTALL_REQUIRES = [l.strip() for l in fid.readlines() if l] -# requirements for those browsing PyPI -REQUIRES = [r.replace('>=', ' (>= ') + ')' for r in INSTALL_REQUIRES] +# 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] REQUIRES = [r.replace('==', ' (== ') for r in REQUIRES] -REQUIRES = [r.replace('[array]', '') 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'))] def configuration(parent_package='', top_path=None): @@ -59,17 +73,9 @@ def configuration(parent_package='', top_path=None): if __name__ == "__main__": - # 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) + # purposely fail loudly if numpy or scipy are not available + from numpy.distutils.core import setup + import scipy setup( name=DISTNAME, @@ -99,9 +105,8 @@ def configuration(parent_package='', top_path=None): ], 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 e8e855d8922..cd4e8939e9e 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|unclosed file'] + expected = ['low contrast'] else: - expected = ['unclosed file|\A\Z'] + expected = [] 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 f60a8b237c3..58a4ecfa7a8 100644 --- a/tools/appveyor/requirements.txt +++ b/tools/appveyor/requirements.txt @@ -10,8 +10,9 @@ # wheels are preferred for a given version numpy==1.8.1 scipy==0.14.0 -cython>=0.21 +cython==0.20.2 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 275e1ef524a..55e55c032c2 100755 --- a/tools/travis_before_install.sh +++ b/tools/travis_before_install.sh @@ -1,16 +1,14 @@ #!/usr/bin/env bash set -ex -export WHEELHOUSE="--no-index --trusted-host travis-wheels.scikit-image.org \ - --find-links=http://travis-wheels.scikit-image.org/" +export WHEELHOUSE="--no-index --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$" -WHEELBINARIES="matplotlib numpy scipy pillow cython" +export TEST_ARGS="--exe --ignore-files=^_test -v --with-doctest --ignore-files=^setup.py$" + retry () { # https://gist.github.com/fungusakafungus/1026804 @@ -29,21 +27,20 @@ retry () { return 0 } -# add build dependencies -echo "cython>=0.21" >> requirements.txt -# test minimum requirements on 2.7 +# on Python 2.7, use the system versions of numpy, scipy, and matplotlib +# and the minimum version of cython and networkx if [[ $TRAVIS_PYTHON_VERSION == 2.7* ]]; then - 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} + 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 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 @@ -52,16 +49,12 @@ 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 -# install wheels -for requirement in $WHEELBINARIES; do - WHEELS="$WHEELS $(grep $requirement requirements.txt)" -done -retry pip install $WHEELHOUSE $WHEELS +retry pip install $WHEELHOUSE -r requirements.txt -retry pip install -r requirements.txt +pip install 'dask[array]>=0.5.0' # clean up disk space sudo apt-get clean