Python 개발자라면 기업 환경에서 소프트웨어 설치 시 발생하는 복잡한 문제에 익숙하실 겁니다. 특히 인터넷 접근이 제한되고 엄격한 보안 정책(AppLocker 등)이 적용된 환경에서는 더욱 그렇죠. 최근 Stack Overflow에 올라온 한 개발자의 질문은 이러한 상황에서 Python 오프라인 설치의 어려움을 명확히 보여줍니다. 새로운 Python 설치 관리자가 도입되면서 오프라인 환경에서의 설치가 불가능해지는지에 대한 우려와 함께 특정 에러 메시지가 발생했습니다. 이 글에서는 해당 에러의 원인을 분석하고, 개발자가 안전하고 효율적으로 Python을 오프라인 환경에 설치할 수 있는 실용적인 해결책을 제시합니다.
1. 에러 발생 상황
문제의 개발자는 두 대의 컴퓨터를 사용하고 있습니다. 한 대는 인터넷에 연결되어 있지만 프로그램 화이트리스트(AppLocker) 정책으로 인해 허용되지 않은 실행 파일은 실행할 수 없습니다. 다른 한 대는 인터넷 접근이 불가능하지만, 내부 Nexus 서버를 통해 Python 패키지(pip)를 다운로드할 수 있는 환경입니다. 개발자는 인터넷 연결 컴퓨터에서 Python 설치 파일을 다운로드하여 오프라인 컴퓨터로 복사한 뒤, Nexus를 통해 패키지를 설치하는 워크플로를 사용해 왔습니다.
하지만, 새로운 Python 설치 관리자(Python 3.16 버전부터 예상)가 도입되면서 기존 방식이 더 이상 작동하지 않는다고 우려하고 있습니다. 특히 오프라인 컴퓨터에서는 인터넷에 접근할 수 없어 필요한 패키지를 다운로드할 수 없다는 점이 문제입니다.
발생한 에러 메시지
오프라인 컴퓨터에서 발생한 에러:
Fehler bei der App-Installation. Fehlermeldung: Fehler 0x800704EC: Die Bereitstellung des Pakets "PythonSoftwareFoundation.PythonManager_26.3.240.0_x64__3847v3x7pw1km" wurde von AppLocker blockiert. (0x800704ec)
번역: 앱 설치 오류. 오류 메시지: 오류 0x800704EC: “PythonSoftwareFoundation.PythonManager_26.3.240.0_x64__3847v3x7pw1km” 패키지 배포가 AppLocker에 의해 차단되었습니다. (0x800704ec)
온라인 컴퓨터에서 발생한 에러 (오프라인 설치용 패키지 다운로드 시도):
Fehler bei der App-Installation. Fehlermeldung: Deployment operation failed. (0x80070005)
번역: 앱 설치 오류. 오류 메시지: 배포 작업이 실패했습니다. (0x80070005)
2. 명확한 발생 원인
이 에러의 핵심은 `AppLocker`와 `PythonSoftwareFoundation.PythonManager`라는 키워드에 있습니다. 이 키워드들은 다음과 같은 문제를 시사합니다.
- Windows App 패키지 배포 문제: `PythonSoftwareFoundation.PythonManager`는 주로 Microsoft Store를 통해 배포되는 Python 버전이나, Windows의 최신 앱 배포 메커니즘을 사용하는 경우에 나타나는 패키지 이름입니다. 즉, 개발자가 일반적인 python.org에서 제공하는 인스톨러(.exe)가 아닌, Windows Store 앱 형태로 Python을 설치하려 시도했거나 해당 방식으로 전환된 설치 관리자를 사용하려 했을 가능성이 높습니다.
- AppLocker 정책: `AppLocker`는 기업 환경에서 특정 애플리케이션의 실행을 허용하거나 차단하는 Windows의 보안 기능입니다. 오류 코드
0x800704EC는 “AppLocker에 의해 작업이 차단되었다”는 것을 명확히 나타냅니다. 기업의 AppLocker 정책이 Microsoft Store 앱 또는 특정 서명되지 않은 앱 패키지의 배포를 허용하지 않도록 설정되어 있기 때문에, `PythonSoftwareFoundation.PythonManager` 패키지의 설치가 차단된 것입니다. - 0x80070005 (액세스 거부): 온라인 컴퓨터에서 발생한 이 에러는 배포 작업 자체에 대한 권한 부족 또는 다른 보안 정책(AppLocker 포함)으로 인해 발생할 수 있습니다. 이는 단순히 인터넷 연결 부족 문제가 아니라, 기업의 보안 정책이 해당 설치 프로세스를 근본적으로 막고 있음을 시사합니다.
결론적으로, 문제의 원인은 Python 자체의 문제가 아니라, 기업의 AppLocker 보안 정책이 Microsoft Store 또는 유사한 Windows App 배포 방식을 통해 Python을 설치하려는 시도를 차단하고 있기 때문입니다. 이는 Python 3.16과 같은 특정 버전 때문이라기보다는, 새로운 설치 방식이 기업 보안 정책과 충돌하는 경우에 발생할 수 있습니다.
3. 해결 방법 및 코드 예시
가장 효과적인 해결책은 AppLocker 정책에 의해 제한될 가능성이 적은 전통적인 Python 설치 방식을 사용하는 것입니다.
방법 1: Python 공식 웹사이트 스탠드얼론(Standalone) 인스톨러 사용 (권장)
Microsoft Store 버전 대신, python.org에서 제공하는 공식 스탠드얼론 인스톨러를 사용하는 것이 가장 확실한 해결책입니다. 이 인스톨러는 일반적으로 Windows App 배포 메커니즘을 사용하지 않으므로 AppLocker의 영향을 덜 받습니다.
- 인터넷 연결 컴퓨터에서 다운로드:
- Python 공식 다운로드 페이지에 접속합니다.
- 원하는 Python 버전(예: Python 3.10.x 또는 3.11.x 등 현재 안정 버전)의 “Windows installer (64-bit)” 또는 “Windows installer (32-bit)”를 다운로드합니다. 이 파일은 보통 `.exe` 확장자를 가집니다.
- 참고: 사용자가 우려하는 Python 3.16은 아직 정식 출시되지 않았으므로, 현재 안정 버전을 사용하는 것이 좋습니다.
- 오프라인 컴퓨터로 복사 및 설치:
- 다운로드한 `.exe` 설치 파일을 USB 드라이브 등을 이용해 오프라인 컴퓨터로 복사합니다.
- 오프라인 컴퓨터에서 이 `.exe` 파일을 실행하여 Python을 설치합니다. 설치 중 “Add Python to PATH” 옵션을 선택하는 것이 편리합니다.
방법 2: 필요한 pip 패키지를 오프라인으로 설치
Python 설치 후, pip를 통해 필요한 라이브러리를 Nexus 서버에서 가져오거나, 인터넷 연결 컴퓨터에서 미리 다운로드하여 오프라인으로 설치할 수 있습니다.
- 인터넷 연결 컴퓨터에서 패키지 다운로드:
인터넷이 연결된 컴퓨터에 Python이 설치되어 있다면, `pip download` 명령어를 사용하여 필요한 패키지와 그 의존성들을 `.whl` (wheel) 파일 형태로 다운로드할 수 있습니다.
# 특정 패키지와 그 의존성들을 현재 디렉토리에 다운로드 pip download some-package another-package -d ./offline-packages또는, 특정 `requirements.txt` 파일에 명시된 모든 패키지를 다운로드할 수 있습니다.
pip download -r requirements.txt -d ./offline-packages - 오프라인 컴퓨터에서 패키지 설치:
다운로드한 `.whl` 파일들을 오프라인 컴퓨터로 복사한 후, `pip install` 명령어로 설치합니다.
# 다운로드한 .whl 파일들이 있는 디렉토리로 이동 후 cd ./offline-packages # 모든 .whl 파일을 설치 (Nexus 사용 시 --no-index 제거) pip install *.whl --no-index --find-links .만약 Nexus 서버에 이미 필요한 패키지들이 캐싱되어 있다면, `pip install` 명령어로 Nexus를 가리키면 됩니다.
pip install some-package --index-url http://your-nexus-server/pypi/all/simple --trusted-host your-nexus-server
방법 3: IT 부서와의 협력 (차선책)
만약 공식 `python.org` 인스톨러마저 AppLocker에 의해 차단된다면, IT 부서에 `PythonSoftwareFoundation.PythonManager` 패키지 또는 `python.org` 인스톨러의 실행을 AppLocker 화이트리스트에 추가해달라고 요청해야 합니다. 이 방법은 IT 정책에 따라 시간이 걸리거나 어려울 수 있습니다.
방법 4: Portable Python 또는 Anaconda/Miniconda (대안)
일부 환경에서는 설치 과정 없이 압축 해제만으로 사용할 수 있는 Portable Python 배포판이나, 과학 컴퓨팅에 특화된 Anaconda/Miniconda를 고려할 수 있습니다. 이들은 종종 시스템 전체 설치가 아닌 사용자 디렉토리에 설치되므로 AppLocker의 영향을 덜 받을 수 있습니다. 하지만 Anaconda/Miniconda는 초기 설치 파일 용량이 크고, 환경 관리에 대한 학습 곡선이 있을 수 있습니다.
4. 향후 예방을 위한 팁
- IT 부서와의 사전 조율: 새로운 개발 환경 설정이나 주요 소프트웨어 업데이트 시, AppLocker와 같은 보안 정책에 대한 IT 부서와의 사전 조율은 필수입니다. 필요한 소프트웨어와 그 설치 방식에 대해 미리 논의하여 불필요한 마찰을 줄일 수 있습니다.
- 공식 설치 가이드 숙지: Python과 같은 오픈소스 소프트웨어는 여러 설치 경로(공식 웹사이트, Microsoft Store, 패키지 관리자 등)를 제공합니다. 기업 환경에서는 공식 웹사이트에서 제공하는 스탠드얼론 설치 파일이 가장 안정적이고 예측 가능한 결과를 제공하는 경우가 많습니다.
- 버전 관리 전략: 특정 Python 버전에 얽매이지 않도록 유연한 설치 전략을 수립합니다. 예를 들어, pyenv-win과 같은 도구를 사용하여 여러 Python 버전을 관리하는 것을 고려해볼 수 있습니다(단, pyenv-win 자체도 설치 과정에서 AppLocker에 걸릴 수 있으므로 주의).
- 가상 환경 활용: 어떤 방식으로 Python을 설치하든, 항상
venv나conda와 같은 가상 환경을 사용하여 프로젝트별 의존성을 격리하는 습관을 들여야 합니다. 이는 시스템 전반의 문제를 방지하고 재현 가능한 개발 환경을 만드는 데 필수적입니다. - 오프라인 저장소(Nexus) 적극 활용: Nexus와 같은 내부 저장소를 통해 필요한 모든 Python 패키지를 미리 캐싱하고 관리하는 전략을 강화하여, 외부 인터넷 접근 없이도 개발 환경을 유지할 수 있도록 합니다.
이러한 접근 방식을 통해, 기업의 엄격한 보안 환경에서도 Python 개발 환경을 효과적으로 구축하고 유지보수할 수 있을 것입니다.
![[에러 해결] [PowerShell] 'Get-FileHash' cmdlet을 인식하지 못하는 원인과 해결 방법 [에러 해결] [PowerShell] 'Get-FileHash' cmdlet을 인식하지 못하는 원인과 해결 방법](https://dev-error.com/wp-content/plugins/contextual-related-posts/default.png)