파이썬은 pip 혹은 conda를 통해 라이브러리를 쉽게 설치하고 관리할 수 있다. 그런데 이 방법은 컴퓨터가 인터넷에 연결이 되어 있어야 가능하다. 즉, 인터넷에 연결이 안되거나 내부 보안으로 접속할 수 있는 사이트에 제한이 있는 경우 쓸 수 없다. 그리고 내가 작업하는 환경은 보안 이슈로 인해 pip을 사용할 수 없다! 그래서 그 전에는 생각해보지 못했던 오프라인으로 라이브러리를 설치하는 방법에 대해서 몇 주에 걸쳐 실패를 거듭하면서... 배우고 있다ㅋㅋㅋㅋ
이 글에서는 내가 찾은 방법들을 정리하려고 한다.
이 방법은 .whl 파일을 설치하고자 하는 두 피씨의 os가 같아야 한다...!!!!!!!!
윈도우에서 .whl 파일을 만들어서 리눅스 우분투 환경에 설치하려고 하니까 안되었던 것이어따.....
리눅스 우분투 환경에서 .whl 파일을 만들어서 리눅스 우분투 환경에 설치하니까 쉽게 되더라......
.whl파일은 pypi.org에서 다운로드 받을 수 있다. 그런데 문제는 라이브러리를 설치할 때 그 라이브러리 하나만 설치하면 되는 게 아니라 여러 dependency 라이브러리도 설치를 해야한다는 점이다. 그렇게 하지 않으면 어떤 모듈이 없습니다 등등의 에러가 뜨면서 설치에 실패한다...!
그래서 라이브러리와 dependency들을 다 설치할 수 있는 방법을 찾아보았다.
아래를 인터넷이 되는 다른 컴퓨터에서 실행한다.
1) requirements.txt 파일을 만든다. 내가 설치하고 싶은 라이브러리==버전을 전부 적는다.
예를 들면,
numpy==1.24.0
이렇게 적는다.
2) pip freeze > requirements.txt
라고 터미널에 친다.
그러면 필요한 라이브러리와 더불어 dependency들이 쭉 리스트업된다.
3) mkdir wheelhouse
라고 터미널에 친다.
.whl파일이 들어갈 폴더이다.
4) pip downlaod -r requirments.txt -d wheelhouse
라고 터미널에 친다.
그러면 목록에 있는 .whl 파일들이 wheelhouse 디렉토리에 생성된다.
wheelhouse 디렉토리 안에 requirements.txt를 복사해서 넣는다.
5) 마지막으로 이제 오프라인 컴퓨터로 wheelhouse를 옮겨서 터미널에서 아래 명령어 중에 하나를 친다.
- pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouse
- pip install --no-index --find-links=./wheelhouse -r requirements
여기서 잠깐!
requirements.txt를 만들고 pip freeze를 하지 않더라도
pip download 라이브러리명
으로 depedency까지 .whl 파일을 다운받을 수 있다.
그런데 dependency 이슈 때문에 requirements.txt 로 목록을 만들어서 하는 게 훨씬 낫다.
requirements 목록이 아니라 하나의 라이브러리일 경우
- pip install --no-index --find-lineks=./wheelhouse [라이브러리명]
그런데 나는 오프라인 머신에서 wheel파일을 설치할 때 에러가 떠서 해결을 못했다...ㅋㅋㅋㅋㅋ
지금 생각하면 파이썬 버전 등의 환경이 두 피씨가 달라서 생긴 문제가 아닐까 싶다. (아마도)
파이썬 버전뿐만 아니라 os가 달라서 그렇다고는 왜 생각을 못했을까....
***참고:
https://stackoverflow.com/questions/11091623/how-to-install-packages-offline
무식한 방법인데...ㅋㅋㅋㅋ 여러 시도를 해보다보니 이런 것도 해보게 되었다.
라이브러리를 하나씩 복사해 오는 방법도 있지만 그렇게 하면 dependency들이 없어서 하나씩 하나씩 다 복사해와야하는 문제가 있다. (별거 아닌 것 같지만 dependency가 많기 때문에 거의 불가능...)
그래서 라이브러리를 그냥 통째로 복사해왔다.
이때 중요한 것은 두 피씨 간 환경이 같아야한다는 것.
나는 이 방법으로 해결을 했는데, 그 전에 두 피씨의 환경을 동일하게 만들어줬다.
그래서 두 피씨에 있는 파이썬을 다 삭제하고, 아나콘다 배포판으로 깔았다.
아나콘다 배포판으로 깐 이유는 기본적인 라이브러리가 이미 많이 있기 때문이다.
그리고 나서 이 방법을 유지하는 방법은 라이브러리를 깔 때마다 site-package 전체를 다시 복사해오는 것...
무식하고 시간이 꽤 걸리는 방법이지만, 이후에 복사해올 때는 겹치는 파일은 건너뛸 수 있어서 '그렇게까지' 많은 시간이 들지는 않는다.
추가 코멘트_
이 방법으로 진행했을 때도 No module named ... 문제가 떴다.
동일한 환경의 피씨로 라이브러리를 옮겼을 때는 문제가 없었다.
그러나 다른 환경의 피씨로 라이브러리를 옮기려고 하니, 위 에러가 다시 떴다.
지금 내 개발 환경은
1) 노트북 (online)
2) 폐쇄망 피씨 - 로컬 (offline)
3) 폐쇄망 피씨 - 서버 (offline)
이렇게 있다.
1) 2)는 완벽히 동일한 환경인데 3)은 그렇지 않다.
추측하기로는 완벽히 동일한 환경이 아니기 때문에 1)에서 3)으로 라이브러리를 옮겼을 때, 'No Module named ...' 에러가 뜬 것 같다.
site-package를 복사해 오는 방법은 단순하지만, 개발 환경에 따라 불안정하다.
따라서 항상 사용가능한 방법이 아니기에 다른 방법을 찾아야했다.
그 과정에서 생각해낸 다른 방법이 Docker를 이용하는 것이다.
이에 대해서 아래에 정리해서 올리도록 하겠다.
그런데 그 전에 일단 도커에 대해 전혀 모르기 때문에 공부를 해야해서, 도커에 대한 기본적인 내용을 정리해서 올리는 포스팅을 먼저 하게 될 듯하다.
...화이팅!
여기까지 오프라인 컴퓨터에 라이브러리를 설치하기 위해 내가 했던 것들을 정리해보았다.
더 좋은 방법이 있다면 알려주시길...!
오프라인 환경에서 개발하시는 분들 모두 화이팅입니다!ㅠㅠ