콘솔에서 패키지 설치와 파일 경로 문제로 Discord 봇이 실행되지 않을 때 해결 가이드

2026년 1월 18일·45개 메시지

이 글에서는 디스코드 봇을 디스호스트 환경에 배포할 때 자주 마주치는 콘솔 명령어 제한, 엔트리 파일 이름 문제, requirements.txt 인식 실패 등에 대해 경험을 바탕으로 정리한다. 간단한 확인 절차와 우회 방법, 코드 예제를 통해 빠르게 해결할 수 있다.

증상

  • 호스팅 환경에서 pip install 등 콘솔 명령어로 설치해도 반영되지 않거나 권한 오류가 발생한다.
  • 에러: /usr/local/bin/python: can't open file '/home/container/app.py': [Errno 2] No such file or directory
  • requirements.txt를 넣었는데 라이브러리가 설치되지 않는 것처럼 보인다.
  • 초기 템플릿 파일(index.js, main.py 등)이 비어 있어서 어디에 코드를 넣어야 할지 모른다.

원인

  • 디스호스트는 가상화/컨테이너 기반으로 격리된 환경을 사용하므로, 직접 콘솔에서 패키지를 설치해도 컨테이너 이미지나 실행 환경에 반영되지 않거나 설치 권한이 제한될 수 있다.
  • 런타임에서 기대하는 엔트리 파일명이 고정되어 있어(예: app.py) 다른 이름(main.py)을 사용하면 파일을 찾지 못한다.
  • 자동 템플릿으로 생성되는 파일들이 비어 있고, .envrequirements.txt가 올바른 형식이 아니면 환경변수/의존성 반영이 실패할 수 있다.

해결 방법

1단계: 엔트리 파일과 기본 파일 확인

  • 파이썬은 디폴트 엔트리 파일명이 app.py인지 확인한다. 파일명이 main.py라면 이름을 app.py로 변경한다.
  • Node.js 템플릿은 index.js가 빈 파일로 생성되기도 한다. 필요한 봇 코드를 해당 파일에 넣는다.
  • 권장 파이썬 버전: 3.11. 런타임 설정에서 버전 확인/변경이 가능하면 맞춰둔다.

2단계: .env와 토큰 설정

  • Node.js(또는 환경변수 사용 시) .env 파일에 인증 토큰을 넣는다. 예시:
DISCORD_TOKEN=여기에_토큰_입력
  • 따옴표 없이 토큰 문자열만 넣는다.

3단계: requirements.txt가 작동하지 않을 때 우회

  • 먼저 requirements.txt에 최소한 필수 라이브러리(예: requests, discord.py)를 넣어둔다. (requirements.txt 예시)
requests
discord.py
  • 호스팅에서 pip를 직접 실행할 수 없거나 자동 설치가 실패하면 런타임에서 설치하도록 시도할 수 있다(허용되는 환경에서만 사용). 다음 코드를 app.py 맨 위에 추가하면 실행 중 설치를 시도한다.
import sys
import subprocess

def install(package):
    subprocess.check_call([sys.executable, "-m", "pip", "install", package])

install("requests")
install("discord.py")
  • 또 다른 우회 방법으로는 실행 경로에 직접 라이브러리를 넣고 Python의 모듈 경로에 추가하는 것이다. 예:
import sys
sys.path.append("./lib")

import requests
import discord
  • 위 방법은 호스팅이 외부 패키지 설치를 제한하지만, 수동으로 라이브러리 파일을 업로드하거나 작은 패키지는 런타임에서 설치 가능한 경우에 유효하다. 용량이 큰 패키지는 실패할 수 있다.

4단계: Node.js로 전환 고려 (선택사항)

  • Python 환경에서 반복적으로 문제를 겪는다면 Node.js로 전환하는 것도 방법이다. Node.js 템플릿(index.js)과 .env를 이용해 디스코드 봇을 구성하면 파일명/런타임 차이로 인한 일부 문제를 피할 수 있다. 다만 언어 전환 작업이 필요하다.

마무리

디스코드 봇을 디스호스트에 배포할 때는 엔트리 파일명(app.py)과 .env 형식, 그리고 컨테이너 환경에서의 패키지 설치 제약을 우선 확인한다. requirements.txt 자동 설치가 실패하면 런타임 설치(subprocess)나 sys.path 우회로 해결할 수 있다.