我正在尝试安装和使用 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。
我无法再现它。我是这样做的。
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。