주요 응용 프로그램에는 사용자가 사용할 수있는 몇 가지 추가 기능이 있습니다. 이러한 기능은 자체 디렉토리에 있습니다. 이러한 기능에는 추가 종속성이 필요할 수 있습니다. 그 파일을 requires.txt
파일에 저장하려고합니다. 런타임에 기능이 중단 될 경우 사람들에게 알려주고 싶습니다.python : 런타임시 추가 요구 사항을 확인하는 방법은 무엇입니까?
def checkfeature(feature):
everything_okay = True
f = pkg_resources.resource_stream(feature, "requires.txt")
with f:
for r in pkg_resources.parse_requirements(f):
if pkg_resources.working_set.find(r) is None:
print "%r not found, please install, otherwise this feature does not work" % (r,)
everything_okay = False
return everything_okay
이 오른쪽 일을 파이썬 방법이 있나요 : 나는 현재이 같은 것을 고려하고? 이게 말이 돼?
작은 업데이트 : 너무 복잡하지 그냥 try: import ... except ImportError: ...
같은 하나의 대답에 제안 이유 :
- 우리의 플러그인 종속성의 무리가있을 수 있습니다. 아래 코드와 같은 실제 코드를 작성하는 것은 매우 장황합니다.
- 일부 플러그인에는 특정 버전의 패키지가 필요할 수 있습니다. 시험은 pakcage 특정 검사가 필요하거나 어쨌든
pkg_resources
을 사용하십시오. 그래서 내 위의 아이디어는 pkg_resources를 사용합니다. - 실행할 수있는 플러그인에 대한 단위 테스트를 실행하고 싶습니다. 단위 테스트에서 ImportError를 처리하는 것은 좋지 않습니다.
can_we_unit_test_this_plugin(plugin)
기능을 사용하면 더 쉽게 작업 할 수 있습니다.
두 번째 업데이트 : setup.py
에서 extra_require
에 대해 무엇?
- 사람들은 자주 설치하지 않습니다. 좋아, 나쁜 변명.
- 내 생각에,
setup.py
은extra_require
을 위에서 언급 한requires.txt
에서 곧바로로드합니다. 개별 기능의 개별 하위 디렉토리에 있습니다. 그러나 그것은 정말로 다음 단계입니다.
그래야, 특정 패키지의 특정 버전이 필요할 수도 있습니다. 그리고 기능이 작동하는지 미리 알고 싶습니다. 그것이 해당 기능에 대한 단위 테스트를 활성화하는 방법이기 때문입니다. 나는 나의 질문을 곧 개선 할 것이다. – Elrond
나는 또한 나의 질문에'extra_require'에 대한 주석을 덧붙였다. 나는 그것을 이야기의 다른 부분으로 본다. 기능 점검 정보 : 예, 일반적으로 좋은 일이지만 때로는 매우 추악 할 수 있습니다. 특히, 특정 버전에서 복잡한 버그가 발생한 경우. 참고 : 위 체크 기능 만이 체크 할 수있는 유일한 방법은 아닙니다. 문제의 기능은 그 기능에 독자적으로 추가 할 수 있습니다. – Elrond
@Elrond : expanded; 플러그인을 별도의 패키지로 분리하려고합니다. –