2016-08-08 6 views
0

J'ai téléchargé le PLY, et a couru un test simple ply3.8/test/calclex.pyUtiliser py2exe empaquetant le programme de python avec ply a obtenu l'erreur étrange?

# ----------------------------------------------------------------------------- 
# calclex.py 
# ----------------------------------------------------------------------------- 
import sys 

if ".." not in sys.path: sys.path.insert(0,"..") 
import ply.lex as lex 

tokens = (
    'NAME','NUMBER', 
    'PLUS','MINUS','TIMES','DIVIDE','EQUALS', 
    'LPAREN','RPAREN', 
    ) 

# Tokens 

t_PLUS = r'\+' 
t_MINUS = r'-' 
t_TIMES = r'\*' 
t_DIVIDE = r'/' 
t_EQUALS = r'=' 
t_LPAREN = r'\(' 
t_RPAREN = r'\)' 
t_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*' 

def t_NUMBER(t): 
    r'\d+' 
    try: 
     t.value = int(t.value) 
    except ValueError: 
     print("Integer value too large %s" % t.value) 
     t.value = 0 
    return t 

t_ignore = " \t" 

def t_newline(t): 
    r'\n+' 
    t.lexer.lineno += t.value.count("\n") 

def t_error(t): 
    print("Illegal character '%s'" % t.value[0]) 
    t.lexer.skip(1) 

# Build the lexer 
lexer = lex.lex() 

il fonctionne bien. Mais quand j'utilise py2exe l'emballage dans un fichier exécutable. Lors de son exécution, j'obtiens une erreur comme:

Traceback (most recent call last): 
    File "calclex.py", line 46, in <module> 
    lexer = lex.lex() 
    File "ply\lex.pyc", line 906, in lex 
    File "ply\lex.pyc", line 580, in validate_all 
    File "ply\lex.pyc", line 822, in validate_rules 
    File "ply\lex.pyc", line 833, in validate_module 
    File "inspect.pyc", line 690, in getsourcelines 
    File "inspect.pyc", line 526, in findsource 
    File "inspect.pyc", line 403, in getfile 
TypeError: <module '__main__' (built-in)> is a built-in module 

Est-ce que quelqu'un a essayé d'emballer le ply en fichier exécutable?
Et mon setup.py est la suivante:

from distutils.core import setup 
import py2exe 
setup(console=["calclex.py"]) 
+0

S'il vous plaît lire [cette discussion de la communauté] (http://meta.stackoverflow.com/q/326569/472495) sur la mendicité urgente en questions. – halfer

+1

@halfer merci, je l'ai eu – Ryan

Répondre

0

Ply insiste sur le fait que ses grammaires définies dans les fichiers réels, et non virtualisés des systèmes de fichiers. Il ne fonctionnera donc pas avec py2exe ou pyinstaller ou d'autres programmeurs de ce type qui tentent de rassembler des fichiers source python dans des archives uniques. (Voir aussi Pyinstaller and Ply IOError: source code not available.)

Je ne connais pas de solution de contournement simple. Peut-être devrait-il être signalé comme une demande de fonctionnalité aux mainteneurs Ply.