Subpy는 파이썬 언어의 하위 집합을 정의하고 기능 세트로 지정된 언어 수준 속성에 대한 AST 쿼리를위한 라이브러리입니다.
많은 프로젝트는 정적 분석 및 유형 추론 에 적합한 특정 파이썬의 특정 하위 집합과 협력하는 것을 목표로하며, Subpy는 단순히 최종 사용자에게보다 유익한 오류보고를 제공하려는 의도로 서브 세트를 점검하기위한 정적 분석 라이브러리입니다.
checker 에 대한 입력은 모듈, 함수 또는 소스 코드 일 수 있습니다. feature 열거 코드와 기능이 감지되는 줄 번호가있는 값에 의해 키워진 목록 사전을 반환합니다.
> >> from subpy import checker
> >> import io
> >> print checker ( io )
{ 3 : [ 98 ],
5 : [ 78 , 81 , 84 , 87 ],
9 : [ 78 , 81 , 84 , 87 ],
10 : [ 81 , 84 , 87 ],
32 : [ 92 , 96 ],
34 : [ 79 ]} 사전의 키와 기능 코드를 일치 시키면 표준 라이브러리의 io 모듈에서 다음과 같은 정보를 볼 수 있습니다.
기능 레벨 검사기를 사용하는 예 :
from subpy import checker
from subpy . features import ListComp
def example1 ():
return [ x ** 2 for x in range ( 25 )]
def example2 ():
return 'hello'
features = checker ( example1 )
if ListComp in features :
print 'You used a list comprehension on lines %r' % ( features [ ListComp ])
features = checker ( example2 )
if ListComp not in features :
print 'You did not use any list comprehensions!' 예를 들어 목록 이해력 의 사용을 제외하고 이해를 설정하려면 이러한 기능을 배제하는 파이썬의 하위 집합을 정의 할 수 있습니다.
MyPythonSubset = FullPython - { ListComp , SetComp } validator 명령을 사용하여 주어진 소스에서 지원되지 않는 기능이 감지 될 때 발생할 수 있습니다. 예를 들어, 목록 이해력을 제외하고 Python 기능 세트를 지원하고 이해력을 설정합니다.
from subpy import validator , FullPython , FeatureNotSupported
from subpy . features import ListComp , SetComp
def example ():
return [ x ** 2 for x in range ( 25 )]
my_features = FullPython - { ListComp , SetComp }
validator ( example , features = my_features ) File "<stdin>" , line 2
return [ x ** 2 for x in range ( 25 )]
^
subpy . validate . FeatureNotSupported : ListCompSubpy는 현재 전체 표준 라이브러리를 구문 분석 할 수 있으며 흥미로운 퀴즈 사실을 쿼리하는 데 사용될 수 있습니다.
from subpy import detect
from subpy . stdlib import libraries
from subpy . features import Metaclasses , MInheritance , Exec
import importlib
print ( 'Libraries with Multiple Inheritance and Metaclasses:' )
for lib in libraries :
mod = importlib . import_module ( lib )
features = detect ( mod )
if Metaclasses in features and MInheritance in features :
print ( lib ) Libraries with Multiple Inheritance and Metaclasses:
io
또는 잠재적으로 안전하지 않은 코드 실행을위한 쿼리 :
print ( 'Libraries with Exec' )
for lib in libraries :
mod = importlib . import_module ( lib )
features = detect ( mod )
if Exec in features :
print ( lib ) Libraries with Exec
ihooks
site
cgi
rexec
Bastion
imputil
trace
timeit
cProfile
doctest
code
bdb
runpy
profile
collections
현재 지원되는 기능은 아래에 주어진 값이있는 열거입니다.
실행을 테스트하려면 :
$ python -m unittest discover subpy/tests 핵심 논리는 features.py 및 validate.py 에 자체 포함되어 있으며 테스트 스위트가 포함 된 Subpy 패키지가없는 독립형 모듈로 작동합니다. 표준 라이브러리 외에는 의존성이 없습니다.
Copyright (C) 2013, Continuum Analytics, Inc. 모든 권리 보유.
수정 유무에 관계없이 소스 및 이진 형태의 재분배 및 사용은 다음과 같은 조건이 충족되면 허용됩니다.
소스 코드의 재분배는 위의 저작권 통지,이 조건 목록 및 다음 면책 조항을 유지해야합니다.
이진 형식의 재분배는 위의 저작권 통지,이 조건 목록 및 문서의 다음 면책 조항 및 배포와 함께 제공되는 기타 자료를 재현해야합니다. 이 소프트웨어는 저작권 보유자 및 기고자 "와"그대로 "및 상업성에 대한 묵시적 보증 및 특정 목적에 대한 적합성을 포함하되 이에 국한되지 않는 명시 적 또는 묵시적 보증에 의해 제공됩니다. 어떠한 경우에도 저작권 보유자 또는 기고자는 직접, 간접적, 부수적, 특수, 모범적 또는 결과적 손해 (대체 상품 또는 서비스 조달, 사용 손실, 데이터 또는 이익; 또는 사업 중단)에 대해 책임을지지 않으면 서, 부정적인 책임 또는 불법 행위에 관계없이 어떤 책임이든, 불법 행위를 포함하는지에 대한 책임은 어떠한 경우에도 직접, 간접적, 부수적, 특수, 모범적 또는 결과적 손해에 대해 책임을지지 않아야합니다. 그러한 손상의 가능성에 대해 조언한다면.