BeautifulSoup4를 relative import하는 방법
BeautifulSoup4를 relative import 할 일이 있었다.
근데 하려했는데 안됐다. (4.4.0, 4.4.1 버전을 이용해봤는데 둘 다 안됐다.)
근데 하려했는데 안됐다. (4.4.0, 4.4.1 버전을 이용해봤는데 둘 다 안됐다.)
그 이유는 bs4/builder/__init__.py 에서 from bs4.element import ... 을 하기 때문이다.
즉, bs4 내부 코드에서 bs4의 하부 모듈을 import할 때, 절대경로로 import하기 때문이다.
이 것을 from ..element import ... 처럼 상대경로로 import하도록 수정해야 문제가 발생하지 않는다.
내부적으로 이런 코드가 얼마나 존재할 지를 몰라서, 아래와 같은 코드를 bs4 내에 추가하여 해결하였다. 하지만 이는 깔끔한 해결책은 아니고, 실제로 bs4 내에서 bs4의 하부모듈을 import할 때 relative import를 하도록 코드를 수정해야지 진정한 해결책이 될 것이다.
bs4/builder/__init__.py 의 맨 위에 추가 |
bs4/__init__.py 의 맨 위에 추가 |
실제로 내가 이 문제를 만났을 때에는 전역적으로 bs4가 설치되어 있어서 위와 같은 import에러는 안뜨고 자꾸 html.parser가 없다는 이상한 에러가 떴다. 그래서 bs4의 코드를 순차적으로 따라가면서 겨우 근본적인 원인을 찾아냈다... ㅠㅠ
https://groups.google.com/forum/#!topic/beautifulsoup/n1bFLxqn7SE
그래서 일단 이런 이슈를 community에 남겨놓았다.
혹시 이 것이 나중 버전에 반영이 될 지 안 될지는 모르겠지만,
반영이 안되더라도 bs4를 relative import하고 싶을 땐 위와 같이 하면 될 것 같다.
댓글
댓글 쓰기