파이썬 가상환경 설정 - 에러/내가 해결한 과정

하는·2024년 4월 11일
0

세팅

목록 보기
3/4

설치할 파이썬 버전: 3.8.8

venv 가상환경 설치 cmd 기본 명령어

원래 아래와 같은 절차로 venv 가상환경을 설치하려고 했다.

# 1. 파이썬 3.8.8 소스코드 다운로드
wget https://www.python.org/ftp/python/3.8.8/Python-3.8.8.tgz
tar -xf Python-3.8.8.tgz
cd Python-3.8.8

# 2. 파이썬 빌드
./configure --enable-optimizations
make
make install

# 3. 이전 디렉토리로 이동
cd ..

# 4. 가상환경 생성
python3.8 -m venv myenv

# 5. 가상환경 실행
myenv\Scripts\activate

# 6. 가상환경 비활성화
deactivate

첫번째 make install 에러/해결방법

위 단계를 차례로 진행하다가 2 단계에서 make install에서 권한이 없어 다음과 같은 오류가 났다.

if test "no-framework" = "no-framework" ; then \

/usr/bin/install -c python /usr/local/bin/python3.8; \

else \

/usr/bin/install -c -s Mac/pythonw /usr/local/bin/python3.8; \

fi

/usr/bin/install: 일반 파일 '/usr/local/bin/python3.8'을(를) 생성할 수 없음: 허가 거부

Makefile:1234: recipe for target 'altbininstall' failed

make: *** [altbininstall] Error 1

오류 해결을 위해 클로드가 알려준대로 --prefix 옵션을 사용하여 파이썬을 다른 디렉토리에 설치하는 방법을 사용했다.

  1. 터미널을 열고 홈 디렉토리로 이동
    cd ~
  2. .bashrc 파일을 텍스트 편집기로 열기
    nano .bashrc
  3. 파일의 끝으로 이동하여 export PATH=HOME/python/bin:HOME/python/bin:PATH 을 입력
    export PATH=$HOME/python/bin:$PATH
  4. 변경 사항을 저장하고 편집기 종료. (Ctrl+X) 누른 후 (Y) 누르고 (Enter)
  5. 변경 사항을 적용하기 위해 source ~/. bashrc 명령어를 실행하여 .bashrc 파일을 다시 로드.

두번째 make install 에러/해결 방법

1~5번 단계를 마치고 다시 파이썬을 다운로드하고 설치했다. 또 6번 단계 make install에서 오류가 발생했다.

File "/home/user/Python-3.8.8/Lib/ensurepip/__init__.py", line 35, in _run_pip

return subprocess.run([sys.executable, "-c", code], check=True).returncode

File "/home/user/Python-3.8.8/Lib/subprocess.py", line 516, in run

raise CalledProcessError(retcode, process.args,

subprocess.CalledProcessError: Command '['/home/user/Python-3.8.8/python', '-c', '\nimport runpy\nimport sys\nsys.path = [\'/tmp/tmpil43iv1h/setuptools-49.2.1-py3-none-any.whl\', \'/tmp/tmpil43iv1h/pip-20.2.3-py2.py3-none-any.whl\'] + sys.path\nsys.argv[1:] = [\'install\', \'--no-cache-dir\', \'--no-index\', \'--find-links\', \'/tmp/tmpil43iv1h\', \'--root\', \'/\', \'--upgrade\', \'setuptools\', \'pip\']\nrunpy.run_module("pip", run_name="__main__", alter_sys=True)\n']' returned non-zero exit status 1.

Makefile:1186: recipe for target 'install' failed

make: *** [install] Error 1

파이썬 설치 과정에서 ensurepip 모듈이 pip와 setuptools를 설치하려 할 때 오류가 발생.
--root 옵션이 /로 설정되어 있는데, 이는 시스템 루트 디렉토리에 패키지를 설치하려 했기 때문에 권한 문제가 발생한 것 같다고 한다. (클로드 왈)

  1. 파이썬 실행파일의 경로를 확인
# 홈 디렉토리 아래에서 python3.8 파일을 찾아주는 명령어
find $HOME -name "python3.8"

위 명령어를 입력하면 python3.8 경로가 여러개 나온다. 그 중에서 ~/python/bin/python3.8 으로 끝나는 경로가 파이썬 실행 파일 경로다.

  1. pip 설치
    원래는 1에서 얻은 경로를 사용하여 get-pip.py를 실행하고 pip을 설치하면 된다.
/home/user/python/bin/python3.8 get-pip.py

하지만 저 과정에서 또 오류가 발생하였고 오류를 해결하지 못해서 pip을 소스에서 직접 설치하는 방법을 사용했다.

  • 2-1. pip 소스 코드를 다운로드
wget https://files.pythonhosted.org/packages/py3/p/pip/pip-22.0.4-py3-none-any.whl
  • 2-2. 1에서 얻은 경로를 사용하여 다운로드한 pip 소스 코드를 설치
/home/user/python/bin/python3.8 pip-22.0.4-py3-none-any.whl/pip install --no-index --find-links=pip-22.0.4-py3-none-any.whl pip
  1. pip가 제대로 설치되었는지 확인
/home/user/python/bin/pip3.8 --version

드디어 설치가 완료되었다!
이제 남은 절차를 해주면 된다.

  1. 가상환경 생성
    /home/user/python/bin/python3.8 -m venv myenv

  2. 가상환경 활성화
    source myenv/bin/activate


필요 패키지 설치

pip install pandas==1.2.4 pymysql==1.0.2 datetime sqlalchemy==1.4.15

SSLError 발생

설치 성공한줄 알고 파이썬 파일을 실행시키니 또 pip 오류가 발생했다.

ERROR: No matching distribution found for pandas==1.2.4

WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping

SSL 모듈이 제대로 설치되지 않은 것 같다.

  1. 가상환경 비활성화
deactivate
  1. Python 소스 코드 디렉토리로 이동
cd ~/python-source/Python-3.8.8
  1. 이전 컴파일 결과를 정리
make clean
  1. SSL 라이브러리를 설치
sudo apt-get install libssl-dev
  1. Python을 SSL 지원과 함께 다시 컴파일
./configure --prefix=$HOME/python 
# (클로드는 ./configure --prefix=$HOME/python --with-openssl 입력하라고 했는데 make 명령어에서 에러 뜸)
make
make install
  1. 새 가상 환경 생성
/home/user/python/bin/python3.8 -m venv myenv
  1. 새 가상 환경을 활성화
source myenv/bin/activate
  1. 필요한 패키지를 설치
pip install pandas==1.2.4 ast re pymysql==1.0.2 datetime sqlalchemy==1.4.15

import ctypes 에러/해결

8단계에서

(myenv) (base) user:~/python-source/Python-3.8.8$ pip install pandas==1.2.4 ast re pymysql==1.0.2 datetime sqlalchemy==1.4.15
Collecting pandas==1.2.4
  Downloading pandas-1.2.4-cp38-cp38-manylinux1_x86_64.whl (9.7 MB)
     |████████████████████████████████| 9.7 MB 1.1 MB/s
Collecting ast
  Downloading AST-0.0.2.tar.gz (19 kB)
    ERROR: Command errored out with exit status 1:
     command: /home/user/python-source/Python-3.8.8/myenv/bin/python3.8 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ymebp3ni/ast/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ymebp3ni/ast/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-unbucchd
         cwd: /tmp/pip-install-ymebp3ni/ast/
    Complete output (11 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/home/user/python-source/Python-3.8.8/myenv/lib/python3.8/site-packages/setuptools/__init__.py", line 23, in <module>
        from setuptools.dist import Distribution
      File "/home/user/python-source/Python-3.8.8/myenv/lib/python3.8/site-packages/setuptools/dist.py", line 34, in <module>
        from setuptools import windows_support
      File "/home/user/python-source/Python-3.8.8/myenv/lib/python3.8/site-packages/setuptools/windows_support.py", line 2, in <module>
        import ctypes
      File "/home/user/python/lib/python3.8/ctypes/__init__.py", line 7, in <module>v
        from _ctypes import Union, Structure, Array
    ModuleNotFoundError: No module named '_ctypes'
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
WARNING: You are using pip version 20.2.3; however, version 24.0 is available.
You should consider upgrading via the '/home/user/python-source/Python-3.8.8/myenv/bin/python3.8 -m pip install --upgrade pip' command.

에러 원인: ctypes 모듈이 없음. 파이썬 표준 라이브러리의 일부이지만 컴파일할 때 필요한 일부 종속성이 설치되지 않은듯

  1. 가상환경 비활성화
deactivate
  1. Python 소스 코드 디렉토리로 이동
cd ~/python-source/Python-3.8.8
  1. 이전 빌드 파일을 정리
make clean
  1. libffi 개발 패키지를 설치
sudo apt-get install libffi-dev
  1. Python을 다시 컴파일하고 설치
cd ~로 이동해서
./configure --prefix=$HOME/python
make
make install
  1. 새 가상 환경
/home/user/python/bin/python3.8 -m venv myenv
  1. 새 가상 환경을 활성화
source myenv/bin/activate
  1. 필요한 패키지를 설치
pip install pandas==1.2.4 pymysql==1.0.2 datetime sqlalchemy==1.4.15

우여곡절 여기까지 성공했다.

python 파일 실행

_bz2 에러/해결

가상환경에서 파이썬 파일을 실행시키니 오류가 발생했다.
import pandas as pd 줄에서

ModuleNotFoundError: No module named '_bz2'

에러 발생

내가 해결 방법은 다음과 같다.

  1. bz2 라이브러리를 apt를 통해 설치
sudo apt-get install libbz2-dev
  1. Python 소스 코드 다운로드
wget https://www.python.org/ftp/python/3.8.8/Python-3.8.8.tgz
  1. 압축 해제
tar xvfz Python-3.8.8.tgz
  1. 압축 해제한 디렉토리로 이동
cd Python-3.8.8
  1. 컴파일 및 설치
./configure (또는 
./configure --prefix=$VIRTUAL_ENV/python 또는 
./configure --prefix=$HOME/myenv 어떤 차이점이 있는지는..)
make
sudo make install
  1. 버전 확인
python3 -V
  1. 가상환경 활성화
source myenv/bin/activate
  1. 실행시킬 파이썬 파일 디렉토리로 이동 및 실행

사실 이 과정이 바로 순탄하게 진행되진 않았고,
2. Python 소스 코드 다운로드 과정부터 많이 반복했다.
다시 소스코드 다운 받고 압축 해제하고 디렉토리 이동하고 컴파일하고 다시 cd ~으로 이동해서 가상환경 액티브시키고 파일 실행하니 pandas, pymysql, sqlalchemy그 다 없어서 다시 pip install pandas==1.2.4 같이 하나하나 다 설치했더니 결국 실행에 성공했다.

profile
천천히 꾸준히 취미처럼 냐미😋

0개의 댓글