From 897354e6e4a9ba5ed36fe2ccd75c00a7b3d0b8d4 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Fri, 28 Feb 2014 21:08:17 +0200 Subject: [PATCH] Make GNU MediaGoblin installable on Python 3. --- setup.py | 129 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 72 insertions(+), 57 deletions(-) diff --git a/setup.py b/setup.py index 59f0ab8f..bf31e23b 100644 --- a/setup.py +++ b/setup.py @@ -14,17 +14,24 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from __future__ import print_function + from setuptools import setup, find_packages import os import re +import sys + +PY2 = sys.version_info[0] == 2 # six is not installed yet + READMEFILE = "README" VERSIONFILE = os.path.join("mediagoblin", "_version.py") VSRE = r"^__version__ = ['\"]([^'\"]*)['\"]" def get_version(): - verstrline = open(VERSIONFILE, "rt").read() + with open(VERSIONFILE, "rt") as fobj: + verstrline = fobj.read() mo = re.search(VSRE, verstrline, re.M) if mo: return mo.group(1) @@ -32,6 +39,56 @@ def get_version(): raise RuntimeError("Unable to find version string in %s." % VERSIONFILE) +py2_only_install_requires = [] +if PY2: + py2_only_install_requires.append('argparse') # only for < 2.7 + py2_only_install_requires.append('PasteScript') + # newer sqlalchemy-migrate requires pbr which BREAKS EVERYTHING AND IS + # TERRIBLE AND IS THE END OF ALL THINGS + # I'd love to remove this restriction. + py2_only_install_requires.append('sqlalchemy-migrate<0.8') + py2_only_install_requires.append('mock') # mock is in the stdlib for 3.3+ + +install_requires = [ + 'setuptools', # TODO: is this necessary + 'python-dateutil', + 'wtforms', + 'py-bcrypt', + 'pytest>=2.3.1', + 'pytest-xdist', + 'werkzeug>=0.7', + 'celery>=3.0', + 'kombu', + 'jinja2', + 'sphinx', # TODO: is this a docs requirement? + 'Babel<1.0', + 'webtest<2', + 'ConfigObj', + 'Markdown', + 'sqlalchemy<0.9.0, >0.8.0', + 'itsdangerous', + 'pytz', + # PLEASE change this when we can; a dependency is forcing us to set this + # specific number and it is breaking setup.py develop + 'six==1.5.2', + 'oauthlib==0.5.0', + 'unidecode', + 'ExifRead', + # Annoying. Please remove once we can! We only indirectly + # use pbr, and currently it breaks things, presumably till + # their next release. + 'pbr==0.5.22', + # This is optional: + # 'translitcodec', + # For now we're expecting that users will install this from + # their package managers. + # 'lxml', + # 'PIL', # TODO: switch to Pillow? +] + py2_only_install_requires + +with open(READMEFILE) as fobj: + long_description = fobj.read() + try: setup( name="mediagoblin", @@ -40,54 +97,8 @@ try: zip_safe=False, include_package_data = True, # scripts and dependencies - install_requires=[ - 'setuptools', - 'python-dateutil', - 'PasteScript', - 'wtforms', - 'py-bcrypt', - 'pytest>=2.3.1', - 'pytest-xdist', - 'werkzeug>=0.7', - 'celery>=3.0', - 'kombu', - 'jinja2', - 'sphinx', - 'Babel>=1.0', - 'argparse', - 'webtest<2', - 'ConfigObj', - 'Markdown', - 'sqlalchemy<0.9.0, >0.8.0', - # newer sqlalchemy-migrate requires pbr which BREAKS EVERYTHING AND IS - # TERRIBLE AND IS THE END OF ALL THINGS - # I'd love to remove this restriction. - 'sqlalchemy-migrate<0.8', - 'mock', - 'itsdangerous', - 'pytz', - 'oauthlib==0.5.0', - 'unidecode', - 'ExifRead', - - # PLEASE change this when we can; a dependency is forcing us to set this - # specific number and it is breaking setup.py develop - 'six==1.5.2' - - ## Annoying. Please remove once we can! We only indirectly - ## use pbr, and currently it breaks things, presumably till - ## their next release. - # 'pbr==0.5.22', - - ## This is optional! - # 'translitcodec', - ## For now we're expecting that users will install this from - ## their package managers. - # 'lxml', - # 'PIL', - ], - # requires=['gst'], - test_suite='nose.collector', + install_requires=install_requires, + test_suite='nose.collector', # TODO: We are using py.test now? entry_points="""\ [console_scripts] gmg = mediagoblin.gmg_commands:main_cli @@ -110,29 +121,33 @@ try: author_email='cwebber@gnu.org', url="http://mediagoblin.org/", download_url="http://mediagoblin.org/download/", - long_description=open(READMEFILE).read(), + long_description=long_description, classifiers=[ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python", + 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], ) -except TypeError, e: +except TypeError as e: + import sys + # Check if the problem is caused by the sqlalchemy/setuptools conflict msg_as_str = str(e) if not (msg_as_str == 'dist must be a Distribution instance'): raise # If so, tell the user it is OK to just run the script again. - print "\n\n---------- NOTE ----------" - print "The setup.py command you ran failed." - print "" - print ("It is a known possible failure. Just run it again. It works the " - "second time.") - import sys + print("\n\n---------- NOTE ----------", file=sys.stderr) + print("The setup.py command you ran failed.\n", file=sys.stderr) + print("It is a known possible failure. Just run it again. It works the " + "second time.", file=sys.stderr) sys.exit(1) -- 2.25.1