从github安装python solidity解析器,得到错误信息

问题描述 投票:0回答:1

我正在尝试安装和使用 ConsenSys公司的python实体分析器。......pip3的安装没有给出任何错误,但当我尝试导入模块时,它说

File "<stdin>", line 1, in <module>
  File "/home/seed/.local/lib/python3.5/site-packages/python-solidity-parser/solidity_parser/__init__.py", line 1, in <module>
    from .parser import parse_file, parse, objectify, visit
  File "/home/seed/.local/lib/python3.5/site-packages/python-solidity-parser/solidity_parser/parser.py", line 10, in <module>
    from solidity_parser.solidity_antlr4.SolidityLexer import SolidityLexer
  File "/home/seed/.local/lib/python3.5/site-packages/python-solidity-parser/solidity_parser/solidity_antlr4/SolidityLexer.py", line 783, in <module>
    class SolidityLexer(Lexer):
NameError: name 'Lexer' is not defined

我试着手动安装它,并确保我有所需的依赖关系。我还安装了 antlr4 并下载了所需的 solidity 语法。我在ubuntu 16上使用python 3.5.2。

python installation dependencies antlr solidity
1个回答
1
投票

我无法再现它。我是这样做的。

mkdir solidity-parser-test
cd solidity-parser-test
python3 -m venv env
source env/bin/activate
pip3 install solidity_parser
python3 test.py test.sol

最后一条命令将打印以下内容:

{'children': [{'name': 'solidity',
               'type': 'PragmaDirective',
               'value': '>=0.5.0<0.7.0'},
              {'baseContracts': [],
               'kind': 'contract',
               'name': 'Coin',
               'subNodes': [],
               'type': 'ContractDefinition'}],
 'type': 'SourceUnit'}

test.py 是这样的:

import sys
import pprint

from solidity_parser import parser

sourceUnit = parser.parse_file(sys.argv[1])
pprint.pprint(sourceUnit) 

还有... test.sol 看起来像这样。

pragma solidity >=0.5.0 <0.7.0;

contract Coin {
}

注:测试时Python版本为3.7.6。

© www.soinside.com 2019 - 2024. All rights reserved.