docutils: ImportError: No module named roman

For some reason setup.py can fail with docutils complaining it cannot find the roman module. One thing that works is just removing docutils from your site-packages and reinstall it.

One thought on “docutils: ImportError: No module named roman

  1. The module ‘ roman.py ‘ in … Python32\Lib\site-packages … when installed for Pyton 3x shows (4) Syntax errors concerning the ‘raise…’ command – which got new syntax in Python 3.x

    A copy of CORRECTED roman.py follows – after that it was possible to install it with Python 3.2.0.
    The docutils, however, are NOT suited / adopted for Pyton 3x new SYNTAX at all – they display MANY syntax errors with ‘raise’, ‘print’, … command !!

    [code lang=”python”]"""Convert to and from Roman numerals"""

    __author__ = "Mark Pilgrim (f8dy@diveintopython.org)"
    __version__ = "1.4"
    __date__ = "8 August 2001"
    __copyright__ = """Copyright (c) 2001 Mark Pilgrim

    This program is part of "Dive Into Python", a free Python tutorial for
    experienced programmers. Visit http://diveintopython.org/ for the
    latest version.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the Python 2.1.1 license, available at
    http://www.python.org/2.1.1/license.html
    """

    import re

    #Define exceptions
    class RomanError(Exception): pass
    class OutOfRangeError(RomanError): pass
    class NotIntegerError(RomanError): pass
    class InvalidRomanNumeralError(RomanError): pass

    #Define digit mapping
    romanNumeralMap = ((‘M’, 1000),
    (‘CM’, 900),
    (‘D’, 500),
    (‘CD’, 400),
    (‘C’, 100),
    (‘XC’, 90),
    (‘L’, 50),
    (‘XL’, 40),
    (‘X’, 10),
    (‘IX’, 9),
    (‘V’, 5),
    (‘IV’, 4),
    (‘I’, 1))

    def toRoman(n):
    """convert integer to Roman numeral"""
    if not (0 < n = integer:
    result += numeral
    n -= integer
    return result

    #Define pattern to detect valid Roman numerals
    romanNumeralPattern = re.compile("""
    ^ # beginning of string
    M{0,4} # thousands – 0 to 4 M’s
    (CM|CD|D?C{0,3}) # hundreds – 900 (CM), 400 (CD), 0-300 (0 to 3 C’s),
    # or 500-800 (D, followed by 0 to 3 C’s)
    (XC|XL|L?X{0,3}) # tens – 90 (XC), 40 (XL), 0-30 (0 to 3 X’s),
    # or 50-80 (L, followed by 0 to 3 X’s)
    (IX|IV|V?I{0,3}) # ones – 9 (IX), 4 (IV), 0-3 (0 to 3 I’s),
    # or 5-8 (V, followed by 0 to 3 I’s)
    $ # end of string
    """ ,re.VERBOSE)

    def fromRoman(s):
    """convert Roman numeral to integer"""
    if not s:
    # … raise InvalidRomanNumeralError, ‘Input can not be blank’
    raise InvalidRomanNumeralError( ‘Input can not be blank’ )
    if not romanNumeralPattern.search(s):
    # … raise InvalidRomanNumeralError, ‘Invalid Roman numeral: %s’ % s
    raise InvalidRomanNumeralError( ‘Invalid Roman numeral: %s’ % s )

    result = 0
    index = 0
    for numeral, integer in romanNumeralMap:
    while s[index:index+len(numeral)] == numeral:
    result += integer
    index += len(numeral)
    return result
    [/code]

Leave a Reply

Your email address will not be published. Required fields are marked *