2016-08-08 3 views
0

私はPLYをダウンロードし、それがうまく機能ply3.8/test/calclex.pypy2exeパッキングpythonプログラムを使用して奇妙なエラーがありますか?

# ----------------------------------------------------------------------------- 
# 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() 

で簡単なテストを実行しました。しかし、私はpy2exeを実行可能ファイルに梱包します。それを実行すると、次のようなエラーが表示されます。

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 

誰かが実行可能ファイルにプライをパックしようとしましたか?次のように
そして、私のsetup.pyは次のとおりです。

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

質問を急いで乞うことについて[このコミュニティのディスカッション](http://meta.stackoverflow.com/q/326569/472495)をお読みください。 – halfer

+1

@halferありがとう、私はそれを得た – Ryan

答えて

0

プライは、その文法は本当のファイル、仮想化されていないファイルシステムで定義されていると主張しています。だからpy2exeやpyinstaller、あるいはPythonのソースファイルを一つのアーカイブにまとめようとしている他のプログラマーでは動作しません。 (Pyinstaller and Ply IOError: source code not availableも参照してください)

私は単純な回避策を知りません。おそらく、それは機能メンテナンス担当者に機能要求として報告されるべきです。

関連する問題