Skip to content

Commit

Permalink
Trac #21441: Old installed version of Cython is used
Browse files Browse the repository at this point in the history
On a machine which had an older version of Cython installed but which
was upgraded recently after #20218 was merged:
{{{
$ ls -ld local/lib/python/site-packages/Cython*
drwxrwxr-x 12 jdemeyer jdemeyer 4096 Sep  6 21:23 local/lib/python/site-
packages/Cython
drwxrwxr-x  5 jdemeyer jdemeyer 4096 Sep  6 21:22 local/lib/python/site-
packages/Cython-0.23.3-py2.7-linux-i686.egg
drwxrwxr-x  2 jdemeyer jdemeyer 4096 Sep  6 21:14 local/lib/python/site-
packages/Cython-0.24.1-py2.7.egg-info
}}}

Despite Cython-0.24.1 being available, the older version 0.23.3 is still
used by default. This causes breakage when building the Sage library.
{{{
>>> import Cython
>>> Cython.__version__
'0.23.3'
>>> import sys
>>> [x for x in sys.path if 'Cython' in x]
['/home/jdemeyer/sage-git/local/lib/python2.7/site-
packages/Cython-0.23.3-py2.7-linux-i686.egg']
}}}

The problem is not limited to Cython, the same happens for other
packages too.

This is a blocker ticket since it breaks upgrades from older Sage
versions.

'''Steps to reproduce''':

1. `./sage --sh -c 'easy_install cython==0.23.3'`   # Install an older
version of Cython.

2. `./sage -f cython`   # Rebuild the Cython in Sage. This ''should''
uninstall the old version but it doesn't.

'''Note to the release manager''': ideally, this would be merged
together with #21552 since both tickets trigger recompilation of all
Python packages.

URL: https://trac.sagemath.org/21441
Reported by: jdemeyer
Ticket author(s): Erik Bray, Jeroen Demeyer
Reviewer(s): Jeroen Demeyer, Erik Bray, Matthias Koeppe
  • Loading branch information
Release Manager authored and vbraun committed Oct 3, 2016
2 parents 3678936 + 8fd8273 commit 2f8fc1e
Show file tree
Hide file tree
Showing 88 changed files with 154 additions and 95 deletions.
67 changes: 67 additions & 0 deletions build/bin/sage-pip-install
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#!/usr/bin/env bash
# This command is specifically for pip-installing from a local
# source directory, as opposed to from a package index via package
# name. That is, it is for pip-installing Sage spkgs from their
# extracted upstream sources.
#
# This ensures that any previous installations of the same package
# are uninstalled first.

# Default arguments for all packages installed with `pip install`
# --ignore-installed : Force pip to re-install package even if it thinks it's
# already installed (for which it sometimes gets false
# positives for partially-installed packages).
# --verbose : Display the output when running setup.py.
# --no-deps : Don't install runtime dependencies from PyPI.
# --no-index : Don't look at the package index.
# This also disables pip's version self-check.
pip_install_flags="--ignore-installed --verbose --no-deps --no-index"

# Consume any additional pip install arguments except the last one
while [ $# -gt 1 ]; do
pip_install_flags="$pip_install_flags $1"
shift
done

# Last argument must be "." and will be ignored
if [ "$1" != "." ]; then
echo >&2 "$0 requires . as final argument"
exit 1
fi

# Find out the name of the package that we are installing
name="$(python setup.py --name)"

if [ $? -ne 0 ]; then
echo >&2 "Error: could not determine package name"
exit 1
fi

if [ $(echo "$name" | wc -l) -gt 1 ]; then
name="$(echo "$name" | tail -1)"
echo >&2 "Warning: This package has a badly-behaved setup.py which outputs"
echo >&2 "more than the package name for 'setup.py --name'; using the last"
echo >&2 "line as the package name: $name"
fi

# Keep uninstalling as long as it succeeds
while true; do
out=$(pip uninstall --disable-pip-version-check -y "$name" 2>&1)
if [ $? -ne 0 ]; then
break
fi
echo "$out"
done

# Not ideal, but this is the easiest way to check if the package
# was not installed to begin with (which pip treats as an error).
# If it wasn't, then we proceed quietly; if it was installed show the
# uninstallation output and error out.
if [[ "$out" != *"not installed" ]]; then
echo >&2 "$out"
exit 1
fi

# Finally actually do the installation
echo "Installing package $name using pip"
exec pip install $pip_install_flags .
2 changes: 1 addition & 1 deletion build/pkgs/alabaster/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.7.8
0.7.8.p0
2 changes: 1 addition & 1 deletion build/pkgs/appnope/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.1.0
0.1.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/babel/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.3.4
2.3.4.p0
2 changes: 1 addition & 1 deletion build/pkgs/backports_abc/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.4
0.4.p0
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0.0.p0
1.0.0.p1
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.5.0.1
3.5.0.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/certifi/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2016.2.28
2016.2.28.p0
2 changes: 1 addition & 1 deletion build/pkgs/cvxopt/dependencies
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
numpy $(BLAS) cephes gsl glpk | pkgconfig pip matplotlib
$(PYTHON) numpy $(BLAS) cephes gsl glpk | pkgconfig pip matplotlib

matplotlib is needed to test cvxopt (i.e., if SAGE_CHECK=yes). See #12742.

Expand Down
2 changes: 1 addition & 1 deletion build/pkgs/cvxopt/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.1.8.p1
1.1.8.p2
2 changes: 1 addition & 1 deletion build/pkgs/cycler/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.10.0
0.10.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/cython/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.24.1.p1
0.24.1.p2
2 changes: 1 addition & 1 deletion build/pkgs/dateutil/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.2
2.2.p0
2 changes: 1 addition & 1 deletion build/pkgs/decorator/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.0.6
4.0.6.p0
2 changes: 1 addition & 1 deletion build/pkgs/docutils/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.12
0.12.p0
2 changes: 1 addition & 1 deletion build/pkgs/dot2tex/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.9.0.p0
2.9.0.p1
2 changes: 1 addition & 1 deletion build/pkgs/flask/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.10.1
0.10.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/flask_autoindex/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.6
0.6.p0
2 changes: 1 addition & 1 deletion build/pkgs/flask_babel/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.9
0.9.p0
2 changes: 1 addition & 1 deletion build/pkgs/flask_oldsessions/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.10
0.10.p0
2 changes: 1 addition & 1 deletion build/pkgs/flask_openid/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.2.5
1.2.5.p0
2 changes: 1 addition & 1 deletion build/pkgs/flask_silk/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.2
0.2.p0
2 changes: 1 addition & 1 deletion build/pkgs/functools32/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.2.3-2
3.2.3-2.p0
2 changes: 1 addition & 1 deletion build/pkgs/future/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.15.2
0.15.2.p0
2 changes: 1 addition & 1 deletion build/pkgs/giacpy/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.5.6
0.5.6.p0
2 changes: 1 addition & 1 deletion build/pkgs/git_trac/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
20160625
20160625.p0
2 changes: 1 addition & 1 deletion build/pkgs/imagesize/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.7.1
0.7.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/ipykernel/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.3.1
4.3.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/ipython/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
5.0.0
5.0.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/ipython_genutils/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.1.0
0.1.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/ipywidgets/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
5.2.2.p0
5.2.2.p1
2 changes: 1 addition & 1 deletion build/pkgs/itsdangerous/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.24
0.24.p0
2 changes: 1 addition & 1 deletion build/pkgs/jinja2/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.8
2.8.p0
2 changes: 1 addition & 1 deletion build/pkgs/jsonschema/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.5.1
2.5.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/jupyter_client/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.3.0
4.3.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/jupyter_core/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.1.0
4.1.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/markupsafe/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.23
0.23.p0
2 changes: 1 addition & 1 deletion build/pkgs/matplotlib/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.5.1
1.5.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/mistune/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.7.3
0.7.3.p0
2 changes: 1 addition & 1 deletion build/pkgs/mpmath/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.19
0.19.p0
2 changes: 1 addition & 1 deletion build/pkgs/nbconvert/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.2.0
4.2.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/nbformat/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.0.1
4.0.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/networkx/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.11
1.11.p0
2 changes: 1 addition & 1 deletion build/pkgs/nose/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.3.3
1.3.3.p0
2 changes: 1 addition & 1 deletion build/pkgs/notebook/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.2.1
4.2.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/ore_algebra/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.2
0.2.p0
2 changes: 1 addition & 1 deletion build/pkgs/pari_jupyter/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.1.0
1.1.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/pathlib2/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.1.0
2.1.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/pathpy/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7.1
7.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/pexpect/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.1.0
4.1.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/pickleshare/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.7.2
0.7.2.p0
2 changes: 1 addition & 1 deletion build/pkgs/pip/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
8.1.2.p0
8.1.2.p1
2 changes: 1 addition & 1 deletion build/pkgs/pip/spkg-install
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ done
# pip can install itself!
# need to use --upgrade or else pip, which is importing itself, will think
# itself is already installed
python -m $PIP_INSTALL --upgrade .
python -m pip install --verbose --no-index --upgrade .
2 changes: 1 addition & 1 deletion build/pkgs/pkgconfig/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.1.0
1.1.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/prompt_toolkit/dependencies
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
$(PYTHON) setuptools six wcwidth
$(PYTHON) six wcwidth | pip

----------
All lines of this file are ignored except the first.
Expand Down
2 changes: 1 addition & 1 deletion build/pkgs/prompt_toolkit/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0.3
1.0.3.p0
2 changes: 1 addition & 1 deletion build/pkgs/psutil/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.3.1
4.3.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/ptyprocess/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.5.1
0.5.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/pycrypto/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.6.1.p1
2.6.1.p2
2 changes: 1 addition & 1 deletion build/pkgs/pygments/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.1.3.p0
2.1.3.p1
2 changes: 1 addition & 1 deletion build/pkgs/pyparsing/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.1.5
2.1.5.p0
2 changes: 1 addition & 1 deletion build/pkgs/python_igraph/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.7.0
0.7.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/python_openid/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.2.5
2.2.5.p0
2 changes: 1 addition & 1 deletion build/pkgs/pytz/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2016.4
2016.4.p0
2 changes: 1 addition & 1 deletion build/pkgs/pyx/dependencies
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
$(PYTHON)
$(PYTHON) | pip

----------
All lines of this file are ignored except the first.
Expand Down
2 changes: 1 addition & 1 deletion build/pkgs/pyx/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.12.1
0.12.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/pyzmq/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
15.3.0
15.3.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/rpy2/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.8.2
2.8.2.p0
2 changes: 1 addition & 1 deletion build/pkgs/sagenb_export/dependencies
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
nbconvert ipython six
$(PYTHON) nbconvert ipython six | pip

----------
All lines of this file are ignored except the first.
Expand Down
2 changes: 1 addition & 1 deletion build/pkgs/sagenb_export/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.0
2.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/scipy/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.17.1
0.17.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/setuptools_scm/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.11.1
1.11.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/simplegeneric/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.8.1
0.8.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/singledispatch/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.4.0.3
3.4.0.3.p0
2 changes: 1 addition & 1 deletion build/pkgs/six/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.10.0
1.10.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/snowballstemmer/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.2.1
1.2.1.p0
2 changes: 1 addition & 1 deletion build/pkgs/speaklater/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.3
1.3.p0
2 changes: 1 addition & 1 deletion build/pkgs/sphinx/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.4.4
1.4.4.p0
2 changes: 1 addition & 1 deletion build/pkgs/sympy/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0.p0
1.0.p1
2 changes: 1 addition & 1 deletion build/pkgs/tornado/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.3
4.3.p0
2 changes: 1 addition & 1 deletion build/pkgs/traitlets/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.2.2
4.2.2.p0
2 changes: 1 addition & 1 deletion build/pkgs/twisted/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
16.3.0
16.3.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/vcversioner/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.16.0.0
2.16.0.0.p0
2 changes: 1 addition & 1 deletion build/pkgs/wcwidth/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.1.7
0.1.7.p0
2 changes: 1 addition & 1 deletion build/pkgs/werkzeug/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.11.10
0.11.10.p0
2 changes: 1 addition & 1 deletion build/pkgs/widgetsnbextension/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.2.6
1.2.6.p0
2 changes: 1 addition & 1 deletion build/pkgs/zope_interface/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.2.0
4.2.0.p0
10 changes: 1 addition & 9 deletions src/bin/sage-env
Original file line number Diff line number Diff line change
Expand Up @@ -654,15 +654,7 @@ if [ "${MAKEFLAGS-__unset__}" != "__unset__" ]; then
fi
export MAKE

# Default arguments for all packages installed with `pip install`
# --ignore-installed : Force pip to re-install package even if it thinks it's
# already installed (for which it sometimes gets false
# positives for partially-installed packages).
# --verbose : Display the output when running setup.py.
# --no-deps : Don't install runtime dependencies from PyPI.
# --no-index : Don't look at the package index.
# This also disables pip's version self-check.
export PIP_INSTALL="pip install --ignore-installed --verbose --no-deps --no-index"
export PIP_INSTALL="sage-pip-install"

# When building documentation, use MathJax by default. To turn it off,
# set SAGE_DOC_MATHJAX to be "no" or "False".
Expand Down

0 comments on commit 2f8fc1e

Please sign in to comment.