반응형

pip

python3-pip 혹은 버전에 맞는 pip를 설치해서 써야하는 python 패키지 관리자로 python package를 관리하기엔 필수적으로 사용하는데, python을 거의 처음 사용하다보면 이게 쉽지가 않다.

venv, uv, PYTHONPATH

Python 이라는게 불리는 PYTHONPATH 를 기준으로 (없으면 default 경로로) bin/ lib 등등을 찾아가기 때문에, PYTHONPATH만 별도로 지정이 되면 Python 환경에서 속히 말하는 가상화가 된다.
그걸 이용해서 venv 패키지는 원하는 경로에 venv 폴더를 만들어 각 Task마다 별도의 venv환경을 만들어 꾸밀 수가 있다.
uv는 Rust로 pip를 재구현하여 pip와 실제 구현은 다르다. 하지만 동작은 pip의 동작과 동일하다. uv를 통해서 venv 환경에 접근도 가능하다.

주의... 알면서도...

문제는 pip는 Python을 쓰려면 필수인데, venv로 쓰는 패키지가 있고 uv를 사용하는 패키지도 있고, Host에 깔린 패키지도 있다.
자신이 pip로 패키지를 확인할때는 반드시 주의 해야 한다.
알면서도... 알면서도... 자꾸 뻘짓을 하게 된다.

아래의 세개는 다르다.

pip

$ pip list 

이건 Host에 python3-pip를 설치하고 해당 pip가 우선적으로 되어 있을 경우 설치된 python3-pip 패키지의 pip를 사용하는 것이다.
venv를 사용하는 환경이면 venv activate된 path를 바라보게 되어 python3, lib 모두 해당 경로를 참조하는 경우에도,
Host의 pip 명령어를 치면 activate된 venv경로가 아닌 default로 /usr/bin/pip를 호출하게 되고 이 pip는 바라보는 lib의 path를 venv환경이 아닌 host의 환경을 바라보게 된다.

python3 -m pip

$ python3 -m pip list

이 명령어는 venv가 활성화된 ${PYTHONPATH}/lib의 Python package list를 보여준다.
기본적으로 python3-pip 패키지의 pip 바이너리를 직접적으로 호출하는게 아닌 Python3 pip 모듈을 호출하는 것이기 때문에 python3 바이너리를 호출하고, 이 python3 바이너리는 venv 환경이든 uv환경이든(uv환경도 venv환경과 동일한 영향을 받으므로 venv환경과 동일하겠지만) PATH가 잡힌곳의 python3를 호출하므로 더 안전하다.

uv pip list

$ uv pip list

uv환경을 쓸 경우 이 방법도 PYTHONPATH의 lib에 있는 package를 바라보게 되기 때문에 venv환경의 영향을 받는다.

패키지 확인 전에...

  1. venv환경을 써야 되는 경우가 있다면, 그냥 python3-pip 패키지를 지울 수 있다면 지워버리자.
  2. 무조건 $ python3 -m pip로 명령어를 습관화 하자.
  3. 그렇더라도 중요한 실행 전에는 그냥 아래 세개 명령어 다 때려넣어서 세개중 하나라도 다르다면 지금 pip 호출되는 애들이 다르다는 것이니 주의 해야 한다는 생각을 하자
    $ pip list 
    $ python3 -m pip list
    $ uv pip list

파이썬...

하..역시 스크립트는 나랑 안맞아...

반응형
반응형

 

 

 

  내부 SSL Inspection 솔루션 등을 사용할 경우 중간 인증서가 변경되기 때문에 pip를 사용하는데 문제가 있다.

Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),)': /simple/pyqt5/
Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),)': /simple/pyqt5/
Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),)': /simple/pyqt5/
Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),)': /simple/pyqt5/
Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),)': /simple/pyqt5/
Could not fetch URL https://pypi.python.org/simple/pyqt5/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.python.org', port=443): Max retries exceeded with url: /simple/pyqt5/ (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)'),)) - skipping
Could not find a version that satisfies the requirement pyqt5 (from versions: )
No matching distribution found for pyqt5

 

 


  아래와 같은 오류가 출력되며 pip를 사용할 수 없기 때문에 이럴경우 신뢰할 수 있는 사이트에 대해서 옵션으로 설정하여 SSL인증을 사용하지 않고 pip를 사용할 수 있다.

>> pip --trusted-host <site name> <pip option> <pip option parameter>

 

 

 

pyqt5를 설치하는데에는 아래의 경로를 등록하여 사용하였다.

>> pip --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org install pyinstaller

 

반응형
반응형

WINDOWS 에서 pip 설치 방법

  • Python을 설치하면 내부 Script 경로에 pip Script가 존재함.
    해당 경로의 Path를 환경 변수에 추가하여 pip를 사용할 수 있음.
  • 시스템 속성 -> 고급 탭 -> 환경 변수 -> <USER>에 대한 환경변수 -> (변수) Tab에서 Path 선택 및 편집 클릭 ->  아래 경로 추가 -> 확인
  • C:\Users\%USERNAME%\AppData\Local\Programs\Python\Python<VERSION>\script
반응형

+ Recent posts