티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Why is Python running my module when I import it, and how do I stop it?

모듈을 가져올 때 파이썬에서 모듈을 실행하는 이유는 무엇이며, 어떻게 중지합니까?

 문제 내용 

I have a Python program I'm building that can be run in either of 2 ways: the first is to call python main.py which prompts the user for input in a friendly manner and then runs the user input through the program. The other way is to call python batch.py -file- which will pass over all the friendly input gathering and run an entire file's worth of input through the program in a single go.

나는 두 가지 방법 중 하나로 실행할 수 있는 파이썬 프로그램을 가지고 있다: 첫 번째는 사용자에게 친숙한 방식으로 입력을 요청한 다음 프로그램을 통해 사용자 입력을 실행하는 파이썬 main.py을 호출하는 것이다. 다른 방법은 python batch.py -file-을 호출하는 것인데, 이는 모든 친숙한 입력 수집을 무시하고 프로그램을 통해 전체 파일의 가치를 한 번에 실행할 것이다.

 

The problem is that when I run batch.py, it imports some variables/methods/etc from main.py, and when it runs this code:

문제는 batch.py을 실행할 때 main.py에서 일부 변수/variables/etc를 가져오고 다음 코드를 실행한다는 것입니다.

 

import main

at the first line of the program, it immediately errors because it tries to run the code in main.py.

프로그램의 첫 줄에서, 그것은 main.py에서 코드를 실행하려고 하기 때문에 즉시 오류가 발생한다.

 

How can I stop Python from running the code contained in the main module which I'm importing?

내가 가져오는 메인 모듈에 포함된 코드를 파이썬이 실행하는 것을 어떻게 막을 수 있나요?

 

 

 

 높은 점수를 받은 Solution 

Because this is just how Python works - keywords such as class and def are not declarations. Instead, they are real live statements which are executed. If they were not executed your module would be empty.

왜냐하면 이것은 단지 파이썬이 작동하는 방식이기 때문이다 - class와 def 같은 키워드는 선언이 아니다. 대신, 그것들은 실행되는 실제 실시간 문장들이다. 이들이 실행되지 않으면 모듈이 비어 있습니다.

 

The idiomatic approach is:

관용적인 접근법은 다음과 같다.

 

# 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()

It does require source control over the module being imported, however.

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

 

 

 

 가장 최근 달린 Solution 

There was a Python enhancement proposal PEP 299 which aimed to replace if __name__ == '__main__': idiom with def __main__:, but it was rejected. It's still a good read to know what to keep in mind when using if __name__ = '__main__':.

if __name_== '_main_': 관용구를 def__main_:로 대체하는 것을 목표로 하는 PEP 299 향상 제안이 있었으나 거부되었다. __name_ = '_main_':을 사용할 때 주의해야 할 사항을 아는 것은 여전히 좋은 읽을거리이다.

 

 

 

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

반응형
댓글
공지사항
최근에 올라온 글