PyDev를 사용하여 python3 패키지를 만들고 있습니다. 내 .py 파일 중 하나에는 상대적 상대 가져 오기 인 from . import filename
이 있습니다. 나는 패키지 외부의 다른 파일을 사용하면 패키지에서 가져가 잘 작동 해당 파일을 테스트하지만, 직접의 PyDev에서 해당 파일을 실행하면이 오류와 함께 실패 할 수 :__name__ in Python, Pydev
ImportError: attempted relative import with no known parent package
검색을 많이 후, 나는 발견 모든 가져 오기가 이루어지기 전에 코드를 추가 할 때 작동하는 일부 코드는 다음과 같습니다.
__path__ = [""] # indicates local directory
__package__ = ["package_name"]
모든 것이 올바르게 실행됩니다. 그러나, 그 파일에서 나는이 줄을 넣어 : print(__name__)
출력은 두 문자열입니다!
package_name
__main__
나는 패키지에의 직접 실행되고 있기 때문에이 그냥 의심,하지만 어떻게
if __name__ == "__main__":
그런 짓을합니까? 심지어 변수에 할당 된 두 개의 문자열을 가질 수 있는지 이해가 안
print(repr(__name__))
# output
'package_name'
'__main__'
print(__name__.endswith("__main__"))
# output
False
True
print(type(__name__))
# output
<class 'str'>
<class 'str'>
:
는 여기가 __name__
VAR 더 주위에 엉망이 좀 더 출력입니다. 무슨 일 이니? 이 알려진 파이썬 문제가 ... __main__
로 실행 파일은 다음과 같다
이 파일이 실제로 두 번 실행되는 것 같습니다. 수입 시스템을 혼란에 빠뜨릴 수있는 몇 가지 방법이 있습니다. – user2357112
훨씬 쉬운 방법은 패키지 내용을 직접 실행하지 않고 동일한 파일을 가져올 수있는 모듈과 스크립트로 만들려고하지 않는 것입니다. – user2357112
@ user2357112 두 번 실행하면 어떻게 될지 생각할 수 있습니다. 그리고 당신의 다른 코멘트에 대한 응답으로, 나는 그것이 지금 내가해야 할 일이라고 생각합니다. 파일이 실행 가능한 스크립트가 될 필요는 없습니다. 실행 된 경우 오류가 발생하지 않도록 관심이있었습니다. 도와 주셔서 감사합니다! – Cole128