IT

파이썬이 모듈을 가져올 때 왜 모듈을 실행합니까? 어떻게 중지합니까?

lottoking 2020. 6. 15. 08:04
반응형

파이썬이 모듈을 가져올 때 왜 모듈을 실행합니까? 어떻게 중지합니까?


두 가지 방법 중 하나로 실행할 수있는 Python 프로그램이 있습니다. 첫 번째는 "python main.py"를 호출하여 사용자에게 친숙한 방식으로 입력하라는 메시지를 표시 한 다음 프로그램을 통해 사용자 입력을 실행하는 것입니다. 다른 방법은 "python batch.py -file- " 을 호출 하여 모든 친숙한 입력 수집을 통과하고 한 번에 프로그램을 통해 전체 파일의 입력 값을 실행하는 것입니다.

문제는 "batch.py"를 실행할 때 "main.py"에서 일부 변수 / 방법 / 등을 가져오고이 코드를 실행할 때입니다.

import main

프로그램의 첫 번째 줄에서 "main.py"에서 코드를 실행하려고하기 때문에 즉시 오류가 발생합니다.

가져 오는 "main"모듈에 포함 된 코드를 Python에서 실행하지 못하게하려면 어떻게해야합니까?


이것은 단지 파이썬이 작동하는 방식이므로 선언class같은 키워드 def아닙니다 . 대신, 그것들 은 실행되는 실제 라이브 진술 입니다. 그들이 실행되지 않으면 모듈은 .. empty :-)

어쨌든 관용적 접근법은 다음과 같습니다.

# stuff to run always here such as class/def
def main():
    pass

if __name__ == "__main__":
   # stuff only to run when not called via 'import' here
   main()

무엇을 참조하십시오 ?if __name__ == "__main__"

import그러나 ed 모듈에 대한 소스 제어가 필요합니다 .

행복한 코딩.


파이썬의 작동 방식으로 인해 모듈을 가져올 때 모듈을 실행해야합니다.

가져올 때만 모듈의 코드가 실행되는 것을 방지하기 위해 직접 실행될 때만 다음과 같이 코드를 보호 할 수 있습니다 if.

if __name__ == "__main__":
    # this won't be run when imported

이 코드를 main()메소드 에 넣어 파일을 직접 실행하거나 모듈을 가져 와서를 호출 할 수 main()있습니다. 예를 들어 이것이 파일에 있다고 가정합니다 foo.py.

def main():
    print "Hello World"

if __name__ == "__main__":
    main()

이 프로그램은으로 이동 python foo.py하거나 다른 Python 스크립트에서 실행할 수 있습니다 .

import foo

...

foo.main()


if __name__ == '__main__'관용구 사용 - 모듈을 스크립트로 실행중인 경우 __name__값을 '__main__'가져오고 모듈 이름을 가져 오는 경우 값을 갖는 특수 변수입니다 . 그래서 당신은 같은 것을 할 것입니다

# imports
# class/function definitions
if __name__ == '__main__':
    # code here will only run when you invoke 'python main.py'

불행히도, 당신은하지 않습니다. 이것은 import 구문이 작동하는 방식의 일부이며 그렇게하는 것이 중요합니다. def파이썬이 import를 실행하지 않았다면 실제로 실행 된 무언가라는 것을 기억하십시오 . 함수 없이도 문제가 발생했을 수 있습니다.

그러나 파일에 액세스 할 수 있기 때문에 오류의 원인을보고 확인할 수 있습니다. 오류가 발생하지 않도록 환경을 수정하는 것이 가능할 수 있습니다.


함수 안에 코드를 넣으면 함수를 호출 할 때까지 코드가 실행되지 않습니다. 에 주요 기능이 있어야합니다 main.py. 진술과 함께 :

if __name__ == '__main__':
  main()

그런 다음 호출 python main.py하면 main()함수가 실행됩니다. 가져 오는 main.py경우에는 그렇지 않습니다. 또한 main.py명확성을 위해 다른 이름 으로 바꾸어야 할 수도 있습니다.


"main.py"를 다음과 같이 쓸 수 있습니다 :

#!/usr/bin/env python

__all__=["somevar", "do_something"]

somevar=""

def do_something():
    pass #blahblah

if __name__=="__main__":
    do_something()

이디엄을 로 바꾸는 것을 목표 로 한 파이썬 향상 제안 PEP 299있었지만 거부되었습니다. 를 사용할 때 명심해야 할 사항을 아는 것은 여전히 ​​좋은 독서 입니다.if __name__ == '__main__':def __main__:if __name__ = '__main__':


Although you cannot use import without running the code; there is quite a swift way in which you can input your variables; by using numpy.savez, which stores variables as numpy arrays in a .npz file. Afterwards you can load the variables using numpy.load.

See a full description in the scipy documentation

Please note this is only the case for variables and arrays of variable, and not for methods, etc.


Try just importing the functions needed from main.py? So,

from main import SomeFunction

It could be that you've named a function in batch.py the same as one in main.py, and when you import main.py the program runs the main.py function instead of the batch.py function; doing the above should fix that. I hope.

참고URL : https://stackoverflow.com/questions/6523791/why-is-python-running-my-module-when-i-import-it-and-how-do-i-stop-it

반응형