내가 수행하려고하는 것을 설명하기 위해 에있는 모듈 testmod
이 있다고 가정 해 봅시다. 이 모듈의 전체 내용은 내가 성공적으로 importlib
에서 사용할 수 또는 라이브러리에 내장 된 다른 도구 중 하나를 사용하여, 파이썬에이 모듈을 가져올 수 있도록하고 싶습니다가져 오기 네임 스페이스에 변수 삽입
x = test
입니다.
명백히 현재 디렉토리에서 import testmod
문을 실행하면 오류가 발생합니다 : NameError: name 'test' is not defined
.
__import__
에 하나
globals
또는
locals
을 통과하는 것은 제대로 스크립트 실행되고 내부의 환경을 수정할 것이라고 생각하지만 그렇지 않습니다 :
>>> testmod = __import__('testmod', globals={'test': 'globals'}, locals={'test': 'locals'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/jfoxrabi/testmod.py", line 1, in <module>
x = test
NameError: name 'test' is not defined
내가 볼 수 있도록 나는 다른 시험의 값을 설정했다 이것이 작동하면 testmod.x
이 온다.
이들 중 어느 것도 작동하지 않는 것으로 보아서, 저는 붙어 있습니다. 내가하려는 일을 성취 할 수 있습니까? Sparta가 아닌 Python이기 때문에 그렇습니다.
저는 아나콘다에서 파이썬 3.5를 사용하고 있습니다. 나는 외부 라이브러리를 사용하지 않는 것을 선호한다.
업데이트 : 왜 구성 파일로 내 프로그램에 모듈을 수입하고
. JSON 또는 INI를 사용하지 않는 이유는 Python의 인터프리터 전체를 사용하여 표현식에서 구성의 값을 계산할 수 있기를 원하기 때문입니다. 계산에 사용할 수있는 프로그램에서 미리 계산 한 특정 값을 갖고 싶습니다.
eval
(내 프로그램에서도 마찬가지 임)을 호출하는 것만 큼 나쁘다는 것을 알고 있지만 당분간 보안 측면에 관심이 없습니다. 그러나 저는 이것이 실제로 XY의 사례로 밝혀지면 더 나은 해결책을 기꺼이 받아 들일 의지가 있습니다.
무엇 module.testmod 수입 x'에서'간단한에 대한 자신의에'textmod' 포장 후 빈'__init __. py' 파일을 사용하여 모듈을 수정 하시겠습니까? – albert
당신은 무엇을 성취하려고합니까? 즉, 왜 이것을 필요로합니까? 그냥 [XY] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) 문제를 정리하려고합니다. – tzaman
@ tzaman. 공정하다. 나는 편집을 추가했다. –