본문 바로가기

Python

python xxx is not a package

step function을 이용해 lambda를 실행시키는 도중에 에러가 떴다.

enums가 package가 아니라고 한다.

 

enums라는 package는 분명히 있는데 아니라고 하는 이유를 모르겠다.

 

코드를 유심히 본 결과, system path를 두 군데를 지정해줬는데, 그 두 군데에서 한 곳은 enums.py를, 한 곳은 enums폴더가 있고 안에 storage_enum.py가 있는 것이다.

 

이럴 경우에는 어떻게 될까, 한번 테스트 해봤다.

 

/test/ - aaa/bbb.py
       - aaa.py

다음과 같이 test폴더 안에 aaa폴더와 aaa.py를 만들고 aaa폴더 안에 bbb.py를 만들었다. aaa.py 안에는 test라는 class를 만들었다.

 

test폴더내에서 import aaa.bbb 혹은 from aaa import bbb를 실행시키면 다음과 같이 에러가 난다.

이 에러를 보니 python파일을 먼저 인식하는 거라고 생각했다.

다음과 같이 aaa.py는 잘 인식한다.

aaa.test는 당연히 aaa는 package가 아니기 때문에 에러가 난다.

하지만, aaa폴더안에 __init__.py를 넣는다면?

/test/ - aaa/bbb.py
       - aaa/__init__.py
       - aaa.py

다시 한번 위의 명령어를 실행해봤을 때 다음과 같은 결과를 얻을 수 있다.

그러면 aaa.py를 import하려고하면? 아래와 같이 에러가 난다.

따라서 결론은 package와 python 파일의 이름은 당연히 같게 해서는 안되고 같게된다면, __init__.py파일로 인해 package 여부를 판단하여 package를 우선적으로 인식하고 없다면 python file로 인식하게 된다는 것이다.

 

https://stackoverflow.com/questions/38454852/importerror-with-error-is-not-a-package

 

ImportError: with error 'is not a package'

In python 3 getting into ImportError issues. My project structure is like: cts_sap_polaris/ |-- etc ...

stackoverflow.com

이건 비슷한 에러였는데, 추가적인 설명이 없어서, 직접해봤다. 즉, 위의 에러는 cts_sap_polaris python 파일 내에서 파이썬 파일로 인식을 한 뒤에 같은 이름인 cts_sap_polaris로 package처럼 접근하려고 해서 에러가 난 것이다.