레이블이 pip인 게시물을 표시합니다. 모든 게시물 표시
레이블이 pip인 게시물을 표시합니다. 모든 게시물 표시

pip install gcc error

# pip 설치 중 다음과 같은 에러가 발생했다.
pip install cryptography
... 
/opt/homebrew/bin/gcc-13 -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -I/opt/homebrew/opt/zlib -I/opt/homebrew/opt/zlib -DFFI_BUILDING=1 -DUSE__THREAD -DHAVE_SYNC_SYNCHRONIZE -I/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk/usr/include/ffi -I/Users/ysoftman/.pyenv/versions/3.12.0/include/python3.12 -c src/c/_cffi_backend.c -o build/temp.macosx-14.1-arm64-cpython-312/src/c/_cffi_backend.o -iwithsysroot/usr/include/ffi
...
gcc-13: error: unrecognized command-line option '-iwithsysroot/usr/include/ffi'

# 컴파일러를 clang 으로 변경하면 된다.
CC=clang pip install cryptography

# 참고로 python 환경을 보니 CC 가 gcc 로 설정되어 있었다.
# 예전 pyenv 로 python 설치시 clang 에 문제가 있어 gcc 로 변경해서 설치했던게 문제였다.
python -m sysconfig | rg 'CC = '
40:     CC = "/opt/homebrew/bin/gcc-13"
647:    LINKCC = "/opt/homebrew/bin/gcc-13"

make python package

# python 패키지를 만들때 다음과 같이 하면 dist/xxx.tar.gz(os 따른 포맷)압축파일이 생성된다.
# 소스 배포판 패키지 만들기
python setup.py sdist

# 설치를 위해 압축 풀기
cd dist
tar zxvf xxx.tar.gz
cd xxx

# 설치
python setup.py install

# 또는 pip 로 현재 경로를 설치경로로 사용해서 설치
pip install -e .


##########


# egg -> wheel 로 대체돼 더이상 사용하지 않는다 !!!
# dist/xxx.egg(압축파일)로 패키지 만들도 압축 파일상태에서 설치할 수 도 있다.
# egg 패키지 생성
python setup.py bdist_egg

# 설치
cd dist
python -m easy_install xxx.egg


##########


# wheel (2013년 등장, egg 파일을 대체)
# 소스 배포판으로 만들면 설치를 위해 압축을 풀면 소스가 보인다.
# 압축을 풀때 소스대신 wheel(.whl) 파일로만 보이게 할 수 있다.
# 물론 설치하면 설치된 경로에는 소스파일이 있다.

# wheel 과 setuptools 패키지를 설치해야 한다.
pip install wheel setuptools

# wheel 패키지로 만들기
python setup.py bdist_wheel

# 설치
cd dist
pip install xxx.whl

pypi json response

# pip 대신 curl 등으로 pypi 저장소에 올라온 특정 패키지 리스트를 얻을 수 있다.
# https://pypi.org/simple/{패키지명}/

# 그런데 html 응답이다.
# 파싱이 용이한 json 응답을 받고 싶을때는 다음과 같이 요청하면 된다.
# https://pypi.org/pypi/{패키지명}/json

# pypi api reference

python package dependency

# pip freeze 는 설치된 패키지를 나열하지만
pip freeze 

# 패키지들간의 의존성을 파악하려면 pipdeptree 를 사용하면 된다.
# python package dependency tree 설치 
pip install pipdeptree

# 패키지 의존성 파악
pipdeptree

# 실제 설치된 버전만 보는 경우
pipdeptree --freeze

# json 으로 표시
pipdeptree --json

# 특정 패키지(-p)의 의존성(-r) 보는 경우
pipdeptree -p setuptools -r

# 최상위 패키지만 보려면
pipdeptree | rg '^w+'

python 패키지 이름 모를때 삭제하기

# /usr/local/bin/aaa 파이썬 프로그램을 실행할 수 있는데,
# pip 로 aaa 를 삭제하려고 하면 설치되지 않았다고 나온다.
pip uninstall aaa
WARNING: Skipping aaa as it is not installed.

# aaa 패키지를 정보를 보면 찾을 수 없다고 나온다.
pip show aaa
WARNING: Package(s) not found: aaa

# 원인은 실행파일 이름과 실제 패키지명이 달라서다.
# 삭제를 위해선 실제 패키지명을 알아야 하는데 pip 로 파악할 수 없었다.

# [패키지 설치 경로 찾아서 삭제하기]
# 우선 다음 스크립트를 실행해 python 패키지 모듈 경로를 파악한다.
cat << zzz | python | sed -e 's/\[//g' -e 's/\]//g' -e 's/,/\n/g'
import sys
print(sys.path)
zzz

# 보통 /usr/local/lib/python3.9/site-packages/ 같은 곳에서 
# aaa (실행파일명)으로 시작하는 파일을 찾아본다.
fd "^aaa" /usr/local/lib/python3.9/site-packages/
/usr/local/lib/python3.9/site-packages/aaa
/usr/local/lib/python3.9/site-packages/aaa-bbb
... 생략

# aaa-bbb 가 실제 패키지 이름인것을 유추해볼수 있다.
# aaa-bbb 소스 내에서 aaa 를 사용하는지 확인해본다.
# 이제 pip 로 삭제본다.
pip uninstall aaa-bbb

pip config comment

# git+http 로 pip 패키지 설치시 dependencies 단계에서 진행이 되지 않는다.
pip install git+https://github.com/psf/black
Looking in indexes: https://pypi.org/simple, http://사설(extra-index-url),

... 생략 ...
  Installing build dependencies ... 

# 원인은 pip.conf 사설 extra-index-url 설정 때문이었다.
# pip install requests 와 같이 git+https 가 아닌 경우 
# --isolated (사용자 환경변수나 구성 무시)옵션을 사용하면 설치된다.
# pip install requests --isolated

# 해결방법1
# extra-index-url 주석처리하면 설치된다.
# 주석처리는 # 로 할 수 있다.
# pip config 파일 수정
pip config edit

# 해결방법2(삭제해도 되는 경우)
pip config unset global.extra-index-url

# 참고로 pip install 시 extra-index-url 은 추가만 되고 삭제나 무시돼는 옵션이 없다.
# 관련해서 이슈화되었지만 진행은 안되고 있다.

# 기타 config 관련 정보
# config 설정 리스트
pip config list

# config 파일 수정
pip config edit

# global > user > site 우선순위로 설정된다. 

간단한 http server 프로그램

# 테스트를 위해 http 요청을 처리할 수 있는 간단한 http server 프로그램들
# node.js 기반 http-server
# 설치
npm install http-server -g

# 현재 디렉토리의 파일을 서빙하는 http server 실행
# http://127.0.0.1:8080 로 접속
http-server ./

# python 기반 simple-http
# 현재 디렉토리의 파일을 서빙하는 http server 실행
# http://127.0.0.1:9999 로 접속
python -m SimpleHTTPServer 9999

# python3 에선 http.server 를 사용한다.
python3 -m http.server 9999

python redis cluster import error

# python 2.x 기준 redis, redis-py-cluster 를 사용중
# 다음과 같은 ImportError 가 발생했다.
packages/rediscluster/nodemanager.py", line 12, in <module>
    from redis._compat import b, unicode, bytes, long, basestring
ImportError: cannot import name b

# 문제는 redis 3.0.1 일때 발생하였으며
# 다음과 같이 2.x 버전대로 설치하여 해결했다.
pip install redis==2.10.6

# 아래 redis-py release 를 보면 2018-11-15 쯤 릴리즈를 했는데
# python 2.x 에서 문제가 있는것으로 보인다.
https://github.com/andymccurdy/redis-py/releases

python2, python3 동시에 사용하기

# python2, python3 각각 설치하면 버전에 맞는 PYTHONPATH 를 설정해야 한다.
# pyenv python 버전별 설치 및 버전별 스위칭을 해준다.
# pyenv 를 이용해서 python2, python3 설치하면 PYTHONPATH 신경쓸필요 없이 각 버전에 맞는 환경이 설정되어 잘 실행된다.
# pyenv(https://github.com/pyenv/pyenv)를 설치하자
brew install pyenv

# 쉘 설정 끝에 추가한다.
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

# 쉘을 다시 시작하면 다음과 같이 환경변수에 pyenv 가 가장 우선하게 된다.
echo $PATH
/Users/ysoftman/.pyenv/shims:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

# 파이썬 2.7.14 버전 설치
# -f, --force
pyenv install -f 2.7.14

# 파이썬 2.7.12 버전 삭제
pyenv uninstall -f 2.7.12

# 파이썬 3.6.4 버전 설치
pyenv install -f 3.6.4

# 참고로 mac 에서 pyenv install 3.6.4 설치시
# [Modules/posixmodule.o] Error 1 .. 등이 발생할 하면 xcode 를 업데이트해보자.
# 사용 가능한 파이썬 버전 확인, *현재 기본(전역) 설정된 값
pyenv versions
  2.7.14
* 3.6.4 (set by /Users/ysoftman/.pyenv/version)

# 현재 전역으로 설정된 파이썬 버전 확인
pyenv global

# python3 을 전역으로 설정하는 경우
pyenv global 3.6.4

# 파이썬 3.6.4 을 사용하는 ysoftmanProejctA 이름의 가상환경 생성
# pyenv 로 3.6.4 가 설치되어 있어야 한다.
pyenv virtualenv 3.6.4 ysoftmanProejctA

# virtualenv 리스트
pyenv virtualenvs

# ysoftmanProjectA 가상환경 활성화(시작)
pyenv activate ysoftmanProjectA

# ysoftmanProjectA 가상환경 비활성화
pyenv deactivate ysoftmanProjectA

# virtualenv 삭제
pyenv uninstall ysoftmanProjectA

# 현재 작업중인 디렉토리에서는 python3 를 사용한다면 다음과 같이 실행
# .python-version 파일이 생성되며 내용은 3.6.4 로 명시된다.
pyenv shell 3.6.4

# 이제 같은 쉘 환경에서 python 또는 python3 를 실행이 가능하다.
# 참고로 패키지는 설치는 pip, pip3 그대로 사용하면 된다.
pip2 install numpy pillow matplotlib
pip3 install numpy pillow matplotlib

##########

# pyenv 파이썬 버전만 변경하기 때문에 프로젝트별 패키지를 구분해 관리하려면 
# virtualenv(https://github.com/pypa/virtualenv)를 설치하자
brew install pyenv-virtualenv

# ~/.bashrc 에 다음을 추가해준다.(필요한 경우만)
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
export PYENV_VIRTUALENV_DISABLE_PROMPT=1

# 참고로 pyenv virtualenv-init - 명령을 실행하면
# precmd_function 에 _pyenv_virtualenv_hook() 를 추가 시키고
# 이 함수는 pyenv sh-activate 를 실행하는게 이게 느림(400ms 정도)
# prompt 속도가 느려지니 필요없으면 제외시키자.

# ysoftman1 디렉토리에 python3.6 가상환경 생성
virtualenv ysoftman1 --python=python3.6

# ysoftman1 가상환경 활성화
source ./ysoftman1/bin/activate

# ysoftman1 가상환경 비활성화(activate 스크립트에 deactivate()가 있음)
deactivate

# ysoftman1 가상환경 삭제
rm -rf ./ysoftman1

# 참고로 venv 는 virtualenv 의 경량버전으로 python3.3 부터 기본으로 포함되어 있다.
# 경량버전이라 기능이 적고 virtualenv 보다 속도가 느리다고 한다.
# 현재 디렉토리에 venv 가상환경 설정
# python3 -m venv .

##########

# pip+virtualenv 를 합친 pipenv(https://github.com/pypa/pipenv) 설치
# pipenv 내부적으로 virtualenv 를 사용한다.
pip install pipenv

# 현재 경로의 프로젝트에 새로운 가상환경 생성
# (package.json 같은) Pipfile 패키지 파일을 생성한다.
pipenv
# 또는
pipenv --python 3.7

# 현재 프로젝트(가상환경) 홈 위치 확인
pipenv --where

# 현재 프로젝트의 실제 가상환경 위치 확인
# 이 위치로 패키지,파이썬 등이 설치된다.
# /Users/ysoftman/.local/share/virtualenvs/ysoftmant-test-1234 등의 위치가 된다.
pipenv --venv

# 현재 프로젝트(가상환경)에 패키지 설치(pip)
pipenv install package_name

# 현재 프로젝트(가상환경)에 패키지 삭제(pip)
pipenv uninstall package_name

# 현재 로컬(setup.py)을 현재 프로젝트(가상환경)에 설치
pipenv install -e .

# 현재 프로젝트(가상환경)을 가진 shell 실행
# 가상환경 설정을 반영(. ~/가상환경 설정 경로)한 쉘을 생성한다.
pipenv shell

# 현재 프로젝트(가상환경)에 설치된 패키지 정보 확인
pipenv graph

# 현재 프로젝트(가상환경)에서 실행하기
pipenv run aaa.py

# 현재 프로젝트(가상환경) 제거하기
pipenv --rm

# pipfile.lock 갱신하기
pipenv lock

python 실행 에러

# case1
# 설치는 했지만 pip(python2) 를 찾을 수 없는 경우가 있다.
# python2 를 재설치
brew reinstall python@2

# 안되면 강제 삭제 후 재설치

brew uninstall --ignore-dependencies python@2
brew install python@2

# 참고로 centos 에서
sudo alternatives --set python /usr/bin/python2
# 또는
sudo alternatives --set python /usr/bin/python3
# 로 기본 파이썬 실행 /usr/bin/python 을 설정할 수 있다.

# case2
# pip install requests 모듈을 설치했는데도 
# 파이썬 실행시 다음과 같이 모듈이 없다는 에러가 발생한다.
ImportError: No module named requests

# 해당 모듈은 이미 설치가 된 상태이다.(맥 기준)
pip install requests 
Requirement already satisfied: requests in /Library/Python/2.7/site-packages

# 현재 파이썬에서 사용되는 라이브러리 경로를 확인해보면
# /Library/Python/2.7/site-packages 가 포함되어 있지 않다.
python
>>> import sys
>>> print sys.path

# 파이썬 모듈은 sys.path 에 설정된 경로에서 찾는다.
# PYTHONPATH 환경변수로 다음과 같이 추가하면 sys.path 에 추가된다.
# mac 의 경우
export PYTHONPATH=/Library/Python/2.7/site-packages

# linux 의 경우
export PYTHONPATH=/usr/local/lib/python2.7/site-packages

# sys.path 를 다시 확인해보면 경로가 추가되었고,이제 모듈 에러가 발생하지 않는다.
# 하지만 3.x 버전에선 다시 실행되지 않는 문제가 있다.
# python2, 3 을 모두 사용하려면 pyenv(별도 포스트 참고)로 파이썬을 버전별로 사용하자.
# pip 로 설치시 sudo 를 주면 root 권한으로 설치된다.
# 나중에 설치 삭제때 문제가될수 있어 권한을 사용자로 변경한다.
cd /usr/local/lib/python2.7/site-packages
sudo chown -R ysoftman:admin *

# case3
# python setup.py egg_info 에러 발생하는 경우
# pip 와 setuptools 를 최신으로 업그레이드 하자
sudo pip install --upgrade pip setuptools

# case4
# docker package 를 찾지 못하는 에러가 발생하는 경우
python -c "import docker"
ImportError: No module named docker

# 패키지는 설치된것으로 나온다.
pip list | grep docker

# 이럴땐 pip 로 해당 패키지를 unistall 해주고
sudo pip uninstall -y docker docker-py

# pip 로 docker 패키지를 다시 설치하자.
# 참고로 최신 docker 패키지에 docker-py 기능이 포함되어 있어
# docker-py 를 설치하면 다음의 에러가 발생하여 docker 만 새로 설치해야 한다.
# module' object has no attribute 'APIClient'
sudo pip install --force-reinstall --no-cache-dir docker

pip 설치하기

# PIP(Python Package Index) 는 리눅스의 apt-get 이나 yum 과 같이 방대한 파이썬 라이브러를 쉽게 설치하고 사용하게 해준다.

# 데비안 계열에서 pip 설치
sudo apt-get install python-pip python3-pip

# 레드햇 계열에서 pip 설치
# 우선 EPEL(Extra Packages for Enterprise Linux, Fedora 에서 제공되는 최신 패키지 저장소) 를 추가해야 한다.  
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install python-pip

# mac pip 설치
# python 설치하면 pip 도 설치
brew install python@2 python

# linux pip 설치
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py
# 또는
# pip3가 생성되지 않으면 복사하고 첫줄을 변경해서 써도 된다.
cp /usr/local/bin/pip /usr/local/bin/pip3
vi /usr/loca/bin/pip3

#!/usr/local/opt/python3/bin/python3
# pip 는 다음처럼 pip 디렉토리로 설치된다.
/usr/local/lib/python2.7/site-packages/pip
/usr/local/lib/python3.6/site-packages/pip

# 수동으로 실행하기
python /usr/local/lib/python2.7/site-packages/pip -V

# 윈도우에서 pip 설치
(파이썬 2.7.9 이후나 파이썬 3에는 pip 가 포함되어 있어 업데이트한다.)
python.exe -m pip install -U pip

# 윈도우에서 파이썬 2.7.9 이전 버전이라면 다음 파이썬 파이을 다운 받아 실행한다.
https://bootstrap.pypa.io/get-pip.py
python.exe get-pip.py

# 윈도우에서 파이썬 pip 위치는 다음과 같다.
환경설정 path 추가하도록 하자.(리눅스의 경우 /usr/bin/pip 에 설치됨)
C:\Python34\Scripts\pip.EXE


##########


# pip 기본 명령
# pip 업그레이드
pip install -U pip

# 설치된 패키지 리스트
pip list

# 설치된 패키지 정보 보기
pip show 패키지명

# 패키지 설치
pip install 패키지명

# 특정 버전의 패키지 설치
pip install 패키지명==1.2.3

# 사내에서 proxy 서버를 사용해야 하는 경우
pip install --proxy=https://프로시서버ip:1234 패키지명

# 사내에서 proxy 서버를 사용해야 버전업그레이드 하는 경우
python3 -m pip install --proxy=http://프로시서버ip:123 --upgrade pip 

# 패키지 삭제
pip uninstall 패키지명

# 현재 디렉토리 모듈 editable 로 설치
# -e 옵셥으로 설치한 모듈 정보를 보면(pip show ysoftman123)
# location 값이 /usr/local/lib/python3.x 아닌 현재 로컬 디렉토리로 되어있다.
pip install -e .
# 이제 현재 디렉토리의 .py 를 변경한 상태로 모듈을 실행해볼 수 있다.
python -m ysoftman123