티스토리 뷰
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
'개발 > 파이썬' 카테고리의 다른 글
pytest는 모듈을 가져올 수 없지만 python은 가져올 수 있음 (0) | 2022.11.27 |
---|---|
모듈을 찾을 수 없음 오류: __main_이 패키지가 아니라는 것은 무엇을 의미합니까? (0) | 2022.11.27 |
파이썬을 사용하여 cURL 명령을 실행하는 방법은? (0) | 2022.11.27 |
OSX 10.6에서 파이썬 및 장고와 함께 MySQLdb를 사용하는 방법은? (0) | 2022.11.27 |
ImportError: libGL.so.1: 공유 개체 파일을 열 수 없습니다. 해당 파일 또는 디렉토리가 없습니다. (0) | 2022.11.27 |