poetry는 local에서 패키지 관리용으로 많이 쓰입니다. 배포할 때에는, requirements.txt만 가지고 패키지를 깔게 됩니다. 깔린 패키지에 취약점이 없는지 검사하는 방법은 없을까요? pip-audit을 세팅해 보겠습니다.
poetry pip-audit 설치하기
먼저, poetry에 Pillow 9.5.0 버전을 깔도록 하겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au1.png)
–group dev 옵션이 붙지 않았기 때문에, root에 설치되게 됩니다. requests도 poetry add로 설치했다면, pyproject.toml 파일은 아래와 같을 겁니다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au2.png)
requests는 2.31.0이고, pillow는 9.5.0입니다. 이 패키지들에 취약점이 없을까요? poetry에 pip-audit 패키지를 설치합니다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au3.png)
이 패키지를 group dev에 설치하는데요. 프로덕션 환경에 설치할 필요가 없기 때문입니다. local에서 확인하는 용도로만 쓸 것입니다. 해당 패키지가 깔릴 때, 추가로 필요한 패키지를 확인하는 방법은 lock 파일을 보는 것입니다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au11.png)
CacheControl, html5lib, packaging 등 꽤 많은 패키지들이 걸려 있습니다. pip-audit을 깔 때 같이 딸려오는 것들입니다. 이들이 production에서 필요하지 않은데, 설치할 필요는 없을 겁니다. 필요하지 않다면 제외합시다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au4.png)
다시, pyproject.toml을 확인해 봅시다. 그러면 dev에만 해당 패키지가 걸려있음을 볼 수 있습니다. poetry 환경에 해당 패키지가 깔린 것이니, 취약점을 확인해 봅시다.
취약점 확인하고 업데이트 하기
poetry pip-audit 명령어를 입력해 봅시다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au5.png)
그러면, 6개의 알려진 취약점이 하나의 패키지에 있다고 되어 있습니다. 업데이트를 해야겠군요.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au6.png)
문제가 생긴 패키지가 Pillow이므로, poetry add Pillow@latest를 입력합니다. 해당 패키지의 최신 버전을 설치한다는 의미입니다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au7.png)
이제 다시 toml 파일을 보면, 9.5.0에서 10.3.0으로 버전이 올라간 것을 볼 수 있습니다. 다시 명령어를 실행시켜 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au8.png)
이제, 알려진 취약점을 찾을 수 없다는 메세지가 떴습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au9.png)
이제, 배포를 위해서 설치해야 하는 패키지 정보를 requirements 파일들에 쓰겠습니다. 이 때, pip-audit 같이 local에만 설치해야 하는 것은 dev 그룹에 넣어놓았습니다. 따라서 아래와 같이 export 합니다.
- dev 종속성과 함께 requirements_dev.txt에 export
- root 종속성만 requirements_prod.txt에 export
–with 옵션을 이용하면 쉽게 할 수 있습니다. 아래 글에서 설명한 적이 있으니 한 번 정도 보고 오시면 좋겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au10.png)
해당 파일들을 보면 10.3.0으로 버전업이 된 것을 볼 수 있습니다. 배포할 때 스크립트로 pip를 설치하고, pip install -r ~ 요렇게 입력하면 됩니다. requirements.txt 파일을 검사하는 방법은 없을까요? 당연하게도, -r 옵션을 주면 해당 파일에 대해서 검사할 수 있습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2024/04/pip_au12.png)
위 명령어는 requirements_prod.txt 파일에 있는 패키지들의 취약점이 없는지 검사합니다.