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 !!

    """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
    

Leave a Reply

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

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>