환경을 부트 스트랩하기위한 약간의 스크립트를 작성했지만 모듈 가져 오기 오류를 처리하려고 할 때 혼란에 처했습니다. 내 의도는 불행하게도 NameError로 인한 ImportError 의존성 설치
def install_yaml():
print "Attempting to install python-yaml"
print "=============== Begining of Apt Output ==============="
if subprocess.call(["apt-get", "-y", "install", "python-yaml"]) != 0 :
print "Failure whilst installing python-yaml"
sys.exit(1)
print "================= End of Apt Output =================="
#if all has gone to plan attempt to import yaml
import yaml
reload(yaml)
try:
import yaml
except ImportError:
print "Failure whilst importing yaml"
install_yaml()
grains_config = {}
grains_config['bootstrap version'] = __version__
grains_config['bootstrap time'] = "{0}".format(datetime.datetime.now())
with open("/tmp/doc.yaml", 'w+') as grains_file:
yaml.dump(grains_config, grains_file, default_flow_style=False)
는 내가 나가서 설명하자면 NameError
Traceback (most recent call last):
File "importtest-fail.py", line 32, in <module>
yaml.dump(grains_config, grains_file, default_flow_style=False)
NameError: name 'yaml' is not defined
얻을 때 실행 ... YAML 모듈에 대한 가져 오기 오류를 잡을 다음 모듈을 설치 APT 사용하고, 다시 가져 그것을했다
약간의 연구 끝에 필자가 원하는 것처럼 들리지만 이전에 yaml 모듈에서 NameError를 사용하여 다시로드 한 builtin (이전에 가져온 모듈 다시로드)을 발견했습니다.
누구든지 가져 오기 예외를 처리하고 종속성을 설치하고 "다시 가져 오기"할 수있는 제안이 있습니까?
필자는 분명히 초기 종속성 설치를 수행하기 위해 일부 bash에서 파이썬 스크립트를 래핑 할 수 있지만 그다지 깨끗한 해결책은 아닙니다.
감사
당신은'function'의 로컬 범위에서 이것을했습니다 – Kasramvd