Drop Python 2 installation support.

This commit is contained in:
Ben Sturmfels 2021-03-03 21:40:10 +11:00
parent c5a4eb8da8
commit 83429a8658
8 changed files with 9 additions and 228 deletions

View File

@ -1,80 +0,0 @@
# A Dockerfile for MediaGoblin hacking.
#
# See Dockerfile-debian-python3-sqlite for documentation.
FROM debian:buster
RUN apt-get update && apt-get install -y \
automake \
git \
nodejs \
npm \
python-dev \
python-lxml \
python-pil \
virtualenv
# RUN apt-get install -y \
# python-alembic \
# python-celery \
# python-jsonschema \
# python-kombu \
# python-lxml \
# python-migrate \
# python-mock \
# python-py \
# python-pytest \
# python-pytest-xdist \
# python-six \
# python-snowballstemmer \
# python-sphinx \
# python-sphinxcontrib.websupport \
# python-webtest
# RUN apt-get install -y \
# gstreamer1.0-libav \
# gstreamer1.0-plugins-bad \
# gstreamer1.0-plugins-base \
# gstreamer1.0-plugins-good \
# gstreamer1.0-plugins-ugly \
# python-gst-1.0
# RUN apt-get install -y \
# gir1.2-gst-plugins-base-1.0 \
# gir1.2-gstreamer-1.0 \
# gstreamer1.0-tools \
# python-gi
RUN mkdir /opt/mediagoblin
RUN chown -R www-data:www-data /opt/mediagoblin
WORKDIR /opt/mediagoblin
RUN mkdir --mode=g+w /var/www
RUN chown root:www-data /var/www
RUN groupadd --system mediagoblin --gid 1024 && adduser www-data mediagoblin
USER www-data
RUN echo "1"
RUN git clone --depth=1 git://git.savannah.gnu.org/mediagoblin.git --branch master .
# RUN git clone --depth=1 https://gitlab.com/BenSturmfels/mediagoblin.git --branch master .
RUN ./bootstrap.sh
RUN VIRTUALENV_FLAGS='--system-site-packages' ./configure --without-python3
RUN make
RUN ./bin/python -m pytest ./mediagoblin/tests --boxed
# RUN echo '[[mediagoblin.media_types.audio]]' >> mediagoblin.ini
# RUN echo '[[mediagoblin.media_types.video]]' >> mediagoblin.ini
RUN ./bin/gmg dbupdate
RUN ./bin/gmg adduser --username admin --password a --email admin@example.com
RUN ./bin/gmg makeadmin admin
EXPOSE 6543/tcp
CMD ["./lazyserver.sh", "--server-name=broadcast"]

View File

@ -45,7 +45,6 @@ datarootdir = @datarootdir@
pkgdatadir = $(datadir)/@PACKAGE_NAME@ pkgdatadir = $(datadir)/@PACKAGE_NAME@
pkgincludedir = $(includedir)/@PACKAGE_NAME@ pkgincludedir = $(includedir)/@PACKAGE_NAME@
PYTHONPATH = $(pythondir)$(PATH_SEPARATOR)$(DESTDIR)$(pythondir) PYTHONPATH = $(pythondir)$(PATH_SEPARATOR)$(DESTDIR)$(pythondir)
USE_PYTHON3 = @USE_PYTHON3@
EXTLIB_INSTALLS = extlib/jquery extlib/video.js extlib/leaflet extlib/tinymce EXTLIB_INSTALLS = extlib/jquery extlib/video.js extlib/leaflet extlib/tinymce

View File

@ -79,26 +79,10 @@ dnl
dnl In this section, we check for the presence of important commands dnl In this section, we check for the presence of important commands
dnl and programs. dnl and programs.
dnl--A bit simpler python init---------------------------------------- AC_CHECK_PROGS([PYTHON], [python3], [none])
dnl Expect python2.7 or python2.6 unless --with-python3 is given. AS_IF([test "x$PYTHON" = xnone],
dnl----
AC_ARG_WITH([python3],
[AS_HELP_STRING([--with-python3], [Set up to use Python 3 by default.])],
[],
[with_python3=yes])
AS_IF([test "x$with_python3" != xno],
AC_CHECK_PROGS([PYTHON], [python3], [none])
AC_SUBST([USE_PYTHON3], [true])
AS_IF([test "x$PYTHON" = xnone],
[AC_MSG_FAILURE( [AC_MSG_FAILURE(
[--with-python3 given but no acceptable python3 could be found])]), [--with-python3 given but no acceptable python3 could be found])])
AC_CHECK_PROGS([PYTHON], [python2.7], [none])
AC_SUBST([USE_PYTHON3], [false])
AS_IF([test "x$PYTHON" = xnone],
[AC_MSG_FAILURE(
[No acceptable python (2.7) could be found])]))
dnl---- dnl----
dnl With the following set of macros, we implement an option dnl With the following set of macros, we implement an option

View File

@ -56,7 +56,7 @@ Dependencies
MediaGoblin has the following core dependencies: MediaGoblin has the following core dependencies:
- Python 3.4+ (Python 2.7 is supported, but not recommended) - Python 3.4+
- `python3-lxml <http://lxml.de/>`_ - `python3-lxml <http://lxml.de/>`_
- `git <http://git-scm.com/>`_ - `git <http://git-scm.com/>`_
- `SQLite <http://www.sqlite.org/>`_/`PostgreSQL <http://www.postgresql.org/>`_ - `SQLite <http://www.sqlite.org/>`_/`PostgreSQL <http://www.postgresql.org/>`_
@ -82,13 +82,6 @@ Issue the following commands:
sudo dnf install automake gcc git-core make nodejs npm python3-devel \ sudo dnf install automake gcc git-core make nodejs npm python3-devel \
python3-lxml python3-pillow virtualenv python3-lxml python3-pillow virtualenv
.. note::
MediaGoblin now uses Python 3 by default. To use Python 2, you may
instead substitute from "python3" to "python" for most package
names in the Debian instructions and this should cover dependency
installation. Python 2 installation has not been tested on Fedora.
For a production deployment, you'll also need Nginx as frontend web For a production deployment, you'll also need Nginx as frontend web
server and RabbitMQ to store the media processing queue:: server and RabbitMQ to store the media processing queue::
@ -265,11 +258,6 @@ Set up the environment::
$ VIRTUALENV_FLAGS='--system-site-packages' ./configure $ VIRTUALENV_FLAGS='--system-site-packages' ./configure
$ make $ make
.. note::
If you'd prefer to run MediaGoblin with Python 2, pass in
``--without-python3`` to the ``./configure`` command.
Create and set the proper permissions on the ``user_dev`` directory. Create and set the proper permissions on the ``user_dev`` directory.
This directory will be used to store uploaded media files:: This directory will be used to store uploaded media files::

View File

@ -29,10 +29,12 @@ carefully, or at least skim over it.
**Improvements:** **Improvements:**
- Drop Python 2 installation support (Ben Sturmfels)
**Bug fixes:** **Bug fixes:**
- Make LDAP plugin Python 3 compatible [#5607] (Olivier Mehani) - Make LDAP plugin Python 3 compatible [#5607] (Olivier Mehani)
- Pin a compatible version of WTForms (milquetoast)
0.10.0 0.10.0

View File

@ -58,20 +58,6 @@ Upgrade (upgrading to Python 3)
6. Restart MediaGoblin 6. Restart MediaGoblin
Upgrade (remaining on Python 2 - not recommended)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Update to the latest release. In your ``mediagoblin`` directory, run:
``git fetch && git checkout -q stable && git submodule update``
2. Remove your existing installation:
``rm -rf bin include lib lib64 node_modules``
3. Install MediaGoblin:
``./bootstrap.sh && ./configure --without-python3 && make``
4. Update the database:
``./bin/gmg dbupdate``
5. Restart MediaGoblin
Updating your system Python Updating your system Python
--------------------------- ---------------------------

View File

@ -14,16 +14,4 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import warnings
import six
from mediagoblin._version import __version__ from mediagoblin._version import __version__
if six.PY2:
warnings.warn(
"MediaGoblin's Python 2 support will be removed in the next"
" release. Please consider switching to Python 3.",
DeprecationWarning,
)

View File

@ -23,8 +23,6 @@ import re
import sys import sys
PY2 = sys.version_info[0] == 2 # six is not installed yet
READMEFILE = "README" READMEFILE = "README"
VERSIONFILE = os.path.join("mediagoblin", "_version.py") VERSIONFILE = os.path.join("mediagoblin", "_version.py")
VSRE = r"^__version__ = ['\"]([^'\"]*)['\"]" VSRE = r"^__version__ = ['\"]([^'\"]*)['\"]"
@ -40,86 +38,6 @@ def get_version():
raise RuntimeError("Unable to find version string in %s." % raise RuntimeError("Unable to find version string in %s." %
VERSIONFILE) VERSIONFILE)
pyversion_install_requires = []
if PY2:
pyversion_install_requires.append('alabaster<=0.7.999') # Tested with 0.7.12
pyversion_install_requires.append('alembic<=1.4.999') # Tested with 1.4.2
pyversion_install_requires.append('amqp<=2.5.999') # Tested with 2.5.2
pyversion_install_requires.append('apipkg<=1.999') # Tested with 1.5
pyversion_install_requires.append('atomicwrites<=1.4.999') # Tested with 1.4.0
pyversion_install_requires.append('attrs<=19.3.999') # Tested with 19.3.0
pyversion_install_requires.append('Babel<=2.8.999') # Tested with 2.8.0
pyversion_install_requires.append('beautifulsoup4<=4.7.999') # Tested with 4.7.1
pyversion_install_requires.append('billiard<=3.5.0.999') # Tested with 3.5.0.5
pyversion_install_requires.append('celery<=4.2.999') # Tested with 4.2.2
pyversion_install_requires.append('certifi<=2020.4.5.999') # Tested with 2020.4.5.1
pyversion_install_requires.append('chardet<=3.0.999') # Tested with 3.0.4
pyversion_install_requires.append('configobj<=5.0.999') # Tested with 5.0.6
pyversion_install_requires.append('configparser<=5.0.999') # Tested with 5.0.0
pyversion_install_requires.append('contextlib2<=0.6.999') # Tested with 0.6.0.post1
pyversion_install_requires.append('decorator<=4.4.999') # Tested with 4.4.2
pyversion_install_requires.append('dnspython<=1.16.999') # Tested with 1.16.0
pyversion_install_requires.append('docutils<=0.999') # Tested with 0.16
pyversion_install_requires.append('email-validator<=1.0.999') # Tested with 1.0.5
pyversion_install_requires.append('execnet<=1.7.999') # Tested with 1.7.1
pyversion_install_requires.append('ExifRead<=2.1.999') # Tested with 2.1.2
pyversion_install_requires.append('funcsigs<=1.0.999') # Tested with 1.0.2
pyversion_install_requires.append('functools32<=3.2.999') # Tested with 3.2.3.post2
pyversion_install_requires.append('idna<=2.999') # Tested with 2.9
pyversion_install_requires.append('imagesize<=1.2.999') # Tested with 1.2.0
pyversion_install_requires.append('importlib-metadata<=1.6.999') # Tested with 1.6.0
pyversion_install_requires.append('itsdangerous<=1.1.999') # Tested with 1.1.0
pyversion_install_requires.append('Jinja2<=2.11.999') # Tested with 2.11.2
pyversion_install_requires.append('jsonschema<=3.2.999') # Tested with 3.2.0
pyversion_install_requires.append('kombu<=4.3.999') # Tested with 4.3.0
pyversion_install_requires.append('Mako<=1.1.999') # Tested with 1.1.2
pyversion_install_requires.append('Markdown<=3.1.999') # Tested with 3.1.1
pyversion_install_requires.append('MarkupSafe<=1.1.999') # Tested with 1.1.1
pyversion_install_requires.append('mock<=1.0.999') # Tested with 1.0.1
pyversion_install_requires.append('more-itertools<=5.0.999') # Tested with 5.0.0
pyversion_install_requires.append('oauthlib<=3.1.999') # Tested with 3.1.0
pyversion_install_requires.append('packaging<=20.999') # Tested with 20.3
pyversion_install_requires.append('Paste<=3.4.999') # Tested with 3.4.0
pyversion_install_requires.append('PasteDeploy<=2.1.999') # Tested with 2.1.0
pyversion_install_requires.append('PasteScript<=3.2.999') # Tested with 3.2.0
pyversion_install_requires.append('pathlib2<=2.3.999') # Tested with 2.3.5
pyversion_install_requires.append('pbr<=5.4.999') # Tested with 5.4.5
pyversion_install_requires.append('pkg-resources<=0.0.999') # Tested with 0.0.0
pyversion_install_requires.append('pluggy<=0.13.999') # Tested with 0.13.1
pyversion_install_requires.append('py<=1.8.999') # Tested with 1.8.1
pyversion_install_requires.append('py-bcrypt<=0.999') # Tested with 0.4
pyversion_install_requires.append('Pygments<=2.5.999') # Tested with 2.5.2
pyversion_install_requires.append('PyLD<=1.0.999') # Tested with 1.0.5
pyversion_install_requires.append('pyparsing<=2.4.999') # Tested with 2.4.7
pyversion_install_requires.append('pyrsistent<=0.16.999') # Tested with 0.16.0
pyversion_install_requires.append('pytest<=4.6.999') # Tested with 4.6.9
pyversion_install_requires.append('pytest-forked<=1.1.999') # Tested with 1.1.3
pyversion_install_requires.append('pytest-xdist<=1.31.999') # Tested with 1.31.0
pyversion_install_requires.append('python-dateutil<=2.8.999') # Tested with 2.8.1
pyversion_install_requires.append('python-editor<=1.0.999') # Tested with 1.0.4
pyversion_install_requires.append('pytz<=2020.999') # Tested with 2020.1
pyversion_install_requires.append('requests<=2.23.999') # Tested with 2.23.0
pyversion_install_requires.append('scandir<=1.10.999') # Tested with 1.10.0
pyversion_install_requires.append('six<=1.12.999') # Tested with 1.12.0
pyversion_install_requires.append('snowballstemmer<=2.0.999') # Tested with 2.0.0
pyversion_install_requires.append('Sphinx<=1.8.999') # Tested with 1.8.5
pyversion_install_requires.append('sphinxcontrib-websupport<=1.2.999') # Tested with 1.2.2
pyversion_install_requires.append('SQLAlchemy<=1.3.999') # Tested with 1.3.16
pyversion_install_requires.append('sqlalchemy-migrate<=0.13.999') # Tested with 0.13.0
pyversion_install_requires.append('sqlparse<=0.3.999') # Tested with 0.3.1
pyversion_install_requires.append('Tempita<=0.5.999') # Tested with 0.5.3.dev0
pyversion_install_requires.append('typing<=3.7.4.999') # Tested with 3.7.4.1
pyversion_install_requires.append('Unidecode<=1.1.999') # Tested with 1.1.1
pyversion_install_requires.append('urllib3<=1.25.999') # Tested with 1.25.9
pyversion_install_requires.append('vine<=1.3.999') # Tested with 1.3.0
pyversion_install_requires.append('waitress<=1.4.999') # Tested with 1.4.3
pyversion_install_requires.append('wcwidth<=0.1.999') # Tested with 0.1.9
pyversion_install_requires.append('WebOb<=1.8.999') # Tested with 1.8.6
pyversion_install_requires.append('WebTest<=2.0.999') # Tested with 2.0.35
pyversion_install_requires.append('Werkzeug<=0.16.999') # Tested with 0.16.1
pyversion_install_requires.append('WTForms<=2.3.999') # Tested with 2.3.1
pyversion_install_requires.append('zipp<=1.2.999') # Tested with 1.2.0
install_requires = [ install_requires = [
'waitress', 'waitress',
'alembic>=0.7.5', 'alembic>=0.7.5',
@ -151,7 +69,7 @@ install_requires = [
'PasteScript', 'PasteScript',
'requests>=2.6.0', 'requests>=2.6.0',
'certifi>=2017.4.17', # Reported to be a requirement on Fedora 31 (TODO: test) 'certifi>=2017.4.17', # Reported to be a requirement on Fedora 31 (TODO: test)
'PyLD<2.0.0', # Python 2, but also breaks a Python 3 test if >= 2.0.0. 'PyLD<2.0.0', # Breaks a Python 3 test if >= 2.0.0.
'ExifRead>=2.0.0', 'ExifRead>=2.0.0',
'email-validator', # Seems that WTForms must have dropped this. 'email-validator', # Seems that WTForms must have dropped this.
# This is optional: # This is optional:
@ -160,11 +78,7 @@ install_requires = [
# their package managers. # their package managers.
# 'lxml', # 'lxml',
# 'Pillow', # 'Pillow',
] + pyversion_install_requires ]
if not PY2:
# PyPI version (1.4.2) does not have proper Python 3 support
install_requires.append('ExifRead>=2.0.0')
with open(READMEFILE, encoding="utf-8") as fobj: with open(READMEFILE, encoding="utf-8") as fobj:
long_description = fobj.read() long_description = fobj.read()