diff --git a/source/python3/Python-3.5.1.tar.xz b/source/python3/Python-3.5.1.tar.xz new file mode 100755 index 00000000..aaf1a2cf Binary files /dev/null and b/source/python3/Python-3.5.1.tar.xz differ diff --git a/source/python3/README b/source/python3/README new file mode 100755 index 00000000..ddb5c9bc --- /dev/null +++ b/source/python3/README @@ -0,0 +1,19 @@ +Python is an interpreted, interactive, object-oriented programming +language that combines remarkable power with very clear syntax. +Python's basic power can be extended with your own modules written in C +or C++. Python is also adaptable as an extension language for existing +applications. + +Python 3 (a.k.a. "Python 3000" or "Py3k") is a new version of the +language that is incompatible with the 2.x line of releases. The +language is mostly the same, but many details, especially how built-in +objects like dictionaries and strings work, have changed considerably, +and a lot of deprecated features have finally been removed. Also, the +standard library has been reorganized in a few prominent places. + +It is safe to install this on a system which already has 2.x version of +Python. + +If you'd like to have HTML docs installed, get them from + (HTML format, .tar.bz2 +archive). diff --git a/source/python3/patches/python3.no-static-library.diff b/source/python3/patches/python3.no-static-library.diff new file mode 100755 index 00000000..c33aeedc --- /dev/null +++ b/source/python3/patches/python3.no-static-library.diff @@ -0,0 +1,59 @@ +diff -uar Python-3.5.1.orig/Makefile.pre.in Python-3.5.1/Makefile.pre.in +--- Python-3.5.1.orig/Makefile.pre.in 2015-12-07 03:39:09.000000000 +0200 ++++ Python-3.5.1/Makefile.pre.in 2015-12-14 21:25:22.103542432 +0200 +@@ -564,7 +564,7 @@ + $(RUNSHARED) $(PYTHON_FOR_BUILD) ./Tools/clinic/clinic.py --make + + # Build the interpreter +-$(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) ++$(BUILDPYTHON): Programs/python.o $(LDLIBRARY) $(PY3LIBRARY) + $(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) + + platform: $(BUILDPYTHON) pybuilddir.txt +@@ -599,18 +599,6 @@ + _TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \ + $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build + +-# Build static library +-# avoid long command lines, same as LIBRARY_OBJS +-$(LIBRARY): $(LIBRARY_OBJS) +- -rm -f $@ +- $(AR) $(ARFLAGS) $@ Modules/getbuildinfo.o +- $(AR) $(ARFLAGS) $@ $(PARSER_OBJS) +- $(AR) $(ARFLAGS) $@ $(OBJECT_OBJS) +- $(AR) $(ARFLAGS) $@ $(PYTHON_OBJS) Python/frozen.o +- $(AR) $(ARFLAGS) $@ $(MODULE_OBJS) $(SIGNAL_OBJS) +- $(AR) $(ARFLAGS) $@ $(MODOBJS) +- $(RANLIB) $@ +- + libpython$(LDVERSION).so: $(LIBRARY_OBJS) + if test $(INSTSONAME) != $(LDLIBRARY); then \ + $(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \ +@@ -700,7 +688,7 @@ + echo "-----------------------------------------------"; \ + fi + +-Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) ++Programs/_testembed: Programs/_testembed.o $(LDLIBRARY) $(PY3LIBRARY) + $(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) + + ############################################################################ +@@ -1372,18 +1360,6 @@ + else true; \ + fi; \ + done +- @if test -d $(LIBRARY); then :; else \ +- if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ +- if test "$(SHLIB_SUFFIX)" = .dll; then \ +- $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \ +- else \ +- $(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \ +- $(RANLIB) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \ +- fi; \ +- else \ +- echo Skip install of $(LIBRARY) - use make frameworkinstall; \ +- fi; \ +- fi + $(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c + $(INSTALL_DATA) Programs/python.o $(DESTDIR)$(LIBPL)/python.o + $(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in diff --git a/source/python3/patches/python3.readline.set_pre_input_hook.diff b/source/python3/patches/python3.readline.set_pre_input_hook.diff new file mode 100755 index 00000000..b55820c4 --- /dev/null +++ b/source/python3/patches/python3.readline.set_pre_input_hook.diff @@ -0,0 +1,12 @@ +--- ./Modules/readline.c.orig 2009-10-26 21:32:51.000000000 +0200 ++++ ./Modules/readline.c 2010-05-30 14:07:10.000000000 +0300 +@@ -12,6 +12,9 @@ + #include + #include + ++/* This seems to be needed for set_pre_input_hook to work */ ++#define HAVE_RL_PRE_INPUT_HOOK 1 ++ + #if defined(HAVE_SETLOCALE) + /* GNU readline() mistakenly sets the LC_CTYPE locale. + * This is evil. Only the user or the app's main() should do this! diff --git a/source/python3/patches/python3.x86_64.diff b/source/python3/patches/python3.x86_64.diff new file mode 100755 index 00000000..c6fbf34e --- /dev/null +++ b/source/python3/patches/python3.x86_64.diff @@ -0,0 +1,197 @@ +diff -uar Python-3.5.1.orig/Lib/distutils/command/install.py Python-3.5.1/Lib/distutils/command/install.py +--- Python-3.5.1.orig/Lib/distutils/command/install.py 2015-12-07 03:39:07.000000000 +0200 ++++ Python-3.5.1/Lib/distutils/command/install.py 2015-12-14 21:27:46.083400395 +0200 +@@ -29,15 +29,15 @@ + + INSTALL_SCHEMES = { + 'unix_prefix': { +- 'purelib': '$base/lib/python$py_version_short/site-packages', +- 'platlib': '$platbase/lib/python$py_version_short/site-packages', ++ 'purelib': '$base/lib64/python$py_version_short/site-packages', ++ 'platlib': '$platbase/lib64/python$py_version_short/site-packages', + 'headers': '$base/include/python$py_version_short$abiflags/$dist_name', + 'scripts': '$base/bin', + 'data' : '$base', + }, + 'unix_home': { +- 'purelib': '$base/lib/python', +- 'platlib': '$base/lib/python', ++ 'purelib': '$base/lib64/python', ++ 'platlib': '$base/lib64/python', + 'headers': '$base/include/python/$dist_name', + 'scripts': '$base/bin', + 'data' : '$base', +diff -uar Python-3.5.1.orig/Lib/distutils/sysconfig.py Python-3.5.1/Lib/distutils/sysconfig.py +--- Python-3.5.1.orig/Lib/distutils/sysconfig.py 2015-12-07 03:39:07.000000000 +0200 ++++ Python-3.5.1/Lib/distutils/sysconfig.py 2015-12-14 21:27:46.083400395 +0200 +@@ -133,7 +133,7 @@ + + if os.name == "posix": + libpython = os.path.join(prefix, +- "lib", "python" + get_python_version()) ++ "lib64", "python" + get_python_version()) + if standard_lib: + return libpython + else: +diff -uar Python-3.5.1.orig/Lib/site.py Python-3.5.1/Lib/site.py +--- Python-3.5.1.orig/Lib/site.py 2015-12-07 03:39:08.000000000 +0200 ++++ Python-3.5.1/Lib/site.py 2015-12-14 21:27:46.083400395 +0200 +@@ -303,7 +303,7 @@ + seen.add(prefix) + + if os.sep == '/': +- sitepackages.append(os.path.join(prefix, "lib", ++ sitepackages.append(os.path.join(prefix, "lib64", + "python" + sys.version[:3], + "site-packages")) + else: +diff -uar Python-3.5.1.orig/Lib/sysconfig.py Python-3.5.1/Lib/sysconfig.py +--- Python-3.5.1.orig/Lib/sysconfig.py 2015-12-07 03:39:08.000000000 +0200 ++++ Python-3.5.1/Lib/sysconfig.py 2015-12-14 21:27:46.084400429 +0200 +@@ -20,10 +20,10 @@ + + _INSTALL_SCHEMES = { + 'posix_prefix': { +- 'stdlib': '{installed_base}/lib/python{py_version_short}', +- 'platstdlib': '{platbase}/lib/python{py_version_short}', +- 'purelib': '{base}/lib/python{py_version_short}/site-packages', +- 'platlib': '{platbase}/lib/python{py_version_short}/site-packages', ++ 'stdlib': '{installed_base}/lib64/python{py_version_short}', ++ 'platstdlib': '{platbase}/lib64/python{py_version_short}', ++ 'purelib': '{base}/lib64/python{py_version_short}/site-packages', ++ 'platlib': '{platbase}/lib64/python{py_version_short}/site-packages', + 'include': + '{installed_base}/include/python{py_version_short}{abiflags}', + 'platinclude': +@@ -32,10 +32,10 @@ + 'data': '{base}', + }, + 'posix_home': { +- 'stdlib': '{installed_base}/lib/python', +- 'platstdlib': '{base}/lib/python', +- 'purelib': '{base}/lib/python', +- 'platlib': '{base}/lib/python', ++ 'stdlib': '{installed_base}/lib64/python', ++ 'platstdlib': '{base}/lib64/python', ++ 'purelib': '{base}/lib64/python', ++ 'platlib': '{base}/lib64/python', + 'include': '{installed_base}/include/python', + 'platinclude': '{installed_base}/include/python', + 'scripts': '{base}/bin', +@@ -61,10 +61,10 @@ + 'data': '{userbase}', + }, + 'posix_user': { +- 'stdlib': '{userbase}/lib/python{py_version_short}', +- 'platstdlib': '{userbase}/lib/python{py_version_short}', +- 'purelib': '{userbase}/lib/python{py_version_short}/site-packages', +- 'platlib': '{userbase}/lib/python{py_version_short}/site-packages', ++ 'stdlib': '{userbase}/lib64/python{py_version_short}', ++ 'platstdlib': '{userbase}/lib64/python{py_version_short}', ++ 'purelib': '{userbase}/lib64/python{py_version_short}/site-packages', ++ 'platlib': '{userbase}/lib64/python{py_version_short}/site-packages', + 'include': '{userbase}/include/python{py_version_short}', + 'scripts': '{userbase}/bin', + 'data': '{userbase}', +diff -uar Python-3.5.1.orig/Makefile.pre.in Python-3.5.1/Makefile.pre.in +--- Python-3.5.1.orig/Makefile.pre.in 2015-12-07 03:39:09.000000000 +0200 ++++ Python-3.5.1/Makefile.pre.in 2015-12-14 21:27:46.084400429 +0200 +@@ -125,7 +125,7 @@ + MANDIR= @mandir@ + INCLUDEDIR= @includedir@ + CONFINCLUDEDIR= $(exec_prefix)/include +-SCRIPTDIR= $(prefix)/lib ++SCRIPTDIR= $(prefix)/lib64 + ABIFLAGS= @ABIFLAGS@ + + # Detailed destination directories +diff -uar Python-3.5.1.orig/Modules/getpath.c Python-3.5.1/Modules/getpath.c +--- Python-3.5.1.orig/Modules/getpath.c 2015-12-07 03:39:10.000000000 +0200 ++++ Python-3.5.1/Modules/getpath.c 2015-12-14 21:27:46.085400463 +0200 +@@ -118,8 +118,8 @@ + #endif + + #ifndef PYTHONPATH +-#define PYTHONPATH PREFIX "/lib/python" VERSION ":" \ +- EXEC_PREFIX "/lib/python" VERSION "/lib-dynload" ++#define PYTHONPATH PREFIX "/lib64/python" VERSION ":" \ ++ EXEC_PREFIX "/lib64/python" VERSION "/lib-dynload" + #endif + + #ifndef LANDMARK +@@ -511,7 +511,7 @@ + _pythonpath = Py_DecodeLocale(PYTHONPATH, NULL); + _prefix = Py_DecodeLocale(PREFIX, NULL); + _exec_prefix = Py_DecodeLocale(EXEC_PREFIX, NULL); +- lib_python = Py_DecodeLocale("lib/python" VERSION, NULL); ++ lib_python = Py_DecodeLocale("lib64/python" VERSION, NULL); + + if (!_pythonpath || !_prefix || !_exec_prefix || !lib_python) { + Py_FatalError( +@@ -700,7 +700,7 @@ + } + else + wcsncpy(zip_path, _prefix, MAXPATHLEN); +- joinpath(zip_path, L"lib/python00.zip"); ++ joinpath(zip_path, L"lib64/python00.zip"); + bufsz = wcslen(zip_path); /* Replace "00" with version */ + zip_path[bufsz - 6] = VERSION[0]; + zip_path[bufsz - 5] = VERSION[2]; +@@ -712,7 +712,7 @@ + fprintf(stderr, + "Could not find platform dependent libraries \n"); + wcsncpy(exec_prefix, _exec_prefix, MAXPATHLEN); +- joinpath(exec_prefix, L"lib/lib-dynload"); ++ joinpath(exec_prefix, L"lib64/lib-dynload"); + } + /* If we found EXEC_PREFIX do *not* reduce it! (Yet.) */ + +diff -uar Python-3.5.1.orig/configure Python-3.5.1/configure +--- Python-3.5.1.orig/configure 2015-12-07 03:39:11.000000000 +0200 ++++ Python-3.5.1/configure 2015-12-14 21:27:46.089400598 +0200 +@@ -14464,7 +14464,7 @@ + $as_echo "$LDVERSION" >&6; } + + +-LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}" ++LIBPL='$(prefix)'"/lib64/python${VERSION}/config-${LDVERSION}" + + + # Check whether right shifting a negative integer extends the sign bit +diff -uar Python-3.5.1.orig/setup.py Python-3.5.1/setup.py +--- Python-3.5.1.orig/setup.py 2015-12-07 03:39:11.000000000 +0200 ++++ Python-3.5.1/setup.py 2015-12-14 21:27:46.090400632 +0200 +@@ -469,7 +469,7 @@ + # directories (i.e. '.' and 'Include') must be first. See issue + # 10520. + if not cross_compiling: +- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') ++ add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib64') + add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') + # only change this for cross builds for 3.3, issues on Mageia + if cross_compiling: +@@ -750,11 +750,11 @@ + elif curses_library: + readline_libs.append(curses_library) + elif self.compiler.find_library_file(lib_dirs + +- ['/usr/lib/termcap'], ++ ['/usr/lib64/termcap'], + 'termcap'): + readline_libs.append('termcap') + exts.append( Extension('readline', ['readline.c'], +- library_dirs=['/usr/lib/termcap'], ++ library_dirs=['/usr/lib64/termcap'], + extra_link_args=readline_extra_link_args, + libraries=readline_libs) ) + else: +@@ -791,8 +791,8 @@ + if krb5_h: + ssl_incs += krb5_h + ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs, +- ['/usr/local/ssl/lib', +- '/usr/contrib/ssl/lib/' ++ ['/usr/local/ssl/lib64', ++ '/usr/contrib/ssl/lib64/' + ] ) + + if (ssl_incs is not None and diff --git a/source/python3/python3.SlackBuild b/source/python3/python3.SlackBuild new file mode 100755 index 00000000..cd76df1c --- /dev/null +++ b/source/python3/python3.SlackBuild @@ -0,0 +1,147 @@ +#!/bin/sh + +# Slackware build script for python3 + +# Copyright 2012-2015 Audrius Kažukauskas +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PRGNAM=python3 +VERSION=${VERSION:-3.5.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +# Don't set any SLKCFLAGS here, or OPT="$SLKCFLAGS" before the ./configure. +# Python gets the compile options right without any help. +if [ "$ARCH" = "i486" ]; then + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + LIBDIRSUFFIX="64" +else + LIBDIRSUFFIX="" +fi + +PYVER=$(cut -d. -f1,2 <<< "$VERSION") + +set -eu + +# Location for Python site-packages. +SITEPK=$PKG/usr/lib${LIBDIRSUFFIX}/python${PYVER}/site-packages +# Same as above without $PKG. +TOOLSDIR=/usr/lib${LIBDIRSUFFIX}/python${PYVER}/site-packages + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf Python-$VERSION +tar xvf $CWD/Python-$VERSION.tar.xz +cd Python-$VERSION + +patch -p1 -i $CWD/patches/python3.readline.set_pre_input_hook.diff +# We don't want a large libpython*.a. +patch -p1 -i $CWD/patches/python3.no-static-library.diff + +if [ "$ARCH" = "x86_64" ]; then + # Install to lib64 instead of lib. + patch -p1 -i $CWD/patches/python3.x86_64.diff +fi + +# Fix python3 path in cgi.py. +sed -i '1s|^#.*/usr/local/bin/python|#!/usr/bin/python3|' Lib/cgi.py + +# If this system already has Python3 with pip in site-packages, ignore it and +# install pip anyway. +sed -i 's|\("install",\)|\1 "--ignore-installed",|' Lib/ensurepip/__init__.py + +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --with-threads \ + --enable-ipv6 \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + --build=$ARCH-slackware-linux + +make +make install DESTDIR=$PKG + +# Restore original ensurepip behaviour. +sed -i 's|\("install",\) "--ignore-installed",|\1|' \ + $PKG/usr/lib${LIBDIRSUFFIX}/python${PYVER}/ensurepip/__init__.py + +# Remove to avoid overwriting a copy from Python2. +rm -f $PKG/usr/bin/2to3 + +# We'll install the python-tools under site-packages. +mkdir -p $SITEPK +cp -a Tools/* $SITEPK + +# Remove DOS batch/exe files. +find $PKG \( -name '*.exe' -o -name '*.bat' \) -exec rm -f '{}' \; + +# Fix permissions on dynamic libraries. +find $PKG -type f -perm 555 -exec chmod 755 '{}' \; + +# Install docs. +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a README LICENSE Misc $PKG/usr/doc/$PRGNAM-$VERSION +mv $SITEPK/README $PKG/usr/doc/$PRGNAM-$VERSION/README.python-tools +( cd $PKG/usr/doc/$PRGNAM-$VERSION ; ln -sf $TOOLSDIR Tools ) +if [ -e "$CWD/python-$VERSION-docs-html.tar.bz2" ]; then + tar xf $CWD/python-$VERSION-docs-html.tar.bz2 + mv python-$VERSION-docs-html $PKG/usr/doc/$PRGNAM-$VERSION/html + chown -R root:root $PKG/usr/doc/$PRGNAM-$VERSION/html +fi + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-txz} diff --git a/source/python3/python3.info b/source/python3/python3.info new file mode 100755 index 00000000..f668b299 --- /dev/null +++ b/source/python3/python3.info @@ -0,0 +1,10 @@ +PRGNAM="python3" +VERSION="3.5.1" +HOMEPAGE="https://www.python.org/" +DOWNLOAD="https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tar.xz" +MD5SUM="e9ea6f2623fffcdd871b7b19113fde80" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Audrius Kažukauskas" +EMAIL="audrius@neutrino.lt" diff --git a/source/python3/slack-desc b/source/python3/slack-desc new file mode 100755 index 00000000..bfc8d5c5 --- /dev/null +++ b/source/python3/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +python3: python3 (object-oriented interpreted programming language) +python3: +python3: Python is an interpreted, interactive, object-oriented programming +python3: language that combines remarkable power with very clear syntax. +python3: This is a new version of the language that is incompatible with the +python3: 2.x line of releases. The language is mostly the same, but many +python3: details, especially how built-in objects like dictionaries and strings +python3: work, have changed considerably, and a lot of deprecated features have +python3: finally been removed. Also, the standard library has been reorganized +python3: in a few prominent places. +python3: