IT story

pip, virtualenv를 설치하고 Python에 배포하는 올바른 방법은 무엇입니까?

hot-time 2020. 4. 7. 08:33
반응형

pip, virtualenv를 설치하고 Python에 배포하는 올바른 방법은 무엇입니까?


짧은 질문

배경

에서 내 대답SO 질문 4314376 , 내가 사용하는 것이 좋습니다 ez_setup당신이 다음 설치할 수 있도록 pip하고 virtualenv다음과 같이 :

curl -O http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
sudo easy_install pip
sudo pip install virtualenv

나는 Jesse Noller의 블로그 게시물 에서이 지침을 가져 왔습니다. 그래서 Mac에서 Python을 사용하고 싶습니까? . 내가 거기를 설치하는 유일한 다른 패키지 있도록 깨끗하고 글로벌 사이트 패키지 디렉토리를 유지의 생각처럼 내가있다 virtualenvwrapperdistribute. (최근 이 Python 공공 서비스 발표distribute 때문에 툴박스 에 추가 했습니다 .이 두 패키지를 설치하려면 다음을 사용했습니다.

sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py

더 이상 setuptools 및 easy_install

파이썬 공개 서비스 발표 를 실제로 따르기 위해 새로 파이썬을 설치하면 다음을 수행합니다.

curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
sudo easy_install pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper

글리프의 책망

에 대한 댓글에서 내 대답SO 질문 4314376 , SO 사용자 문양 말했다 :

아니. 절대로 아무것도하지 마십시오 sudo python setup.py install. pip 설치를 ~ / .local 또는 다른 곳에 넣는 ~ / .pydistutils.cfg를 작성하십시오. 특히 이름 ez_setup.py지정된 파일은 setuptools 및 easy_install과 같은 최신 버전의 버전을 빨아들이는 경향이 있으며 운영 체제의 다른 항목을 손상시킬 수 있습니다.

짧은 질문으로 돌아 가기

그래서 Glyph의 답변 은 저의 원래 질문으로 이어집니다.


파이썬 자체에 아무것도 설치하지 않고도이 작업을 수행 할 수 있습니다 .

sudo 나 권한이 필요하지 않습니다.

파일을 편집 할 필요가 없습니다.

부트 스트랩 가상 환경에 virtualenv를 설치하십시오. 그 가상 환경을 사용하여 더 많은 것을 만드십시오. virtualenv는 pip 및 distribution과 함께 제공되므로 한 번의 설치로 모든 것을 얻을 수 있습니다.

  1. virtualenv 다운로드 :
  2. 소스 타르볼 포장 풀기
  3. 압축이 풀린 tarball을 사용하여 깨끗한 가상 환경을 만듭니다. 이 가상 환경은 다른 환경을 "부트 스트랩"하는 데 사용됩니다. 모든 가상 환경은 자동으로 pip를 포함하고 배포합니다.
  4. pip를 사용하여 해당 부트 스트랩 환경에 virtualenv를 설치하십시오.
  5. 부트 스트랩 환경을 사용하여 더 많은 것을 만드십시오!

bash의 예는 다음과 같습니다.

# Select current version of virtualenv:
VERSION=12.0.7
# Name your first "bootstrap" environment:
INITIAL_ENV=bootstrap
# Set to whatever python interpreter you want for your first environment:
PYTHON=$(which python)
URL_BASE=https://pypi.python.org/packages/source/v/virtualenv

# --- Real work starts here ---
curl -O $URL_BASE/virtualenv-$VERSION.tar.gz
tar xzf virtualenv-$VERSION.tar.gz
# Create the first "bootstrap" environment.
$PYTHON virtualenv-$VERSION/virtualenv.py $INITIAL_ENV
# Don't need this anymore.
rm -rf virtualenv-$VERSION
# Install virtualenv into the environment.
$INITIAL_ENV/bin/pip install virtualenv-$VERSION.tar.gz

이제 "부트 스트랩"환경을 사용하여 더 많은 것을 만들 수 있습니다.

# Create a second environment from the first:
$INITIAL_ENV/bin/virtualenv py-env1
# Create more:
$INITIAL_ENV/bin/virtualenv py-env2

가자!

노트

이전 버전의 virtualenv를 사용하지 않는 것으로 가정합니다. 이전 버전에는 플래그가 필요했습니다 --no-site-packges(Python 버전에 따라 --distribute). 이제 python virtualenv.py path-to-bootstrap또는으로 부트 스트랩 환경을 만들 수 있습니다 python3 virtualenv.py path-to-bootstrap.


나는 글리프가 다음과 같은 것을 의미한다고 생각한다.

  1. 디렉토리 ~/.local가 없으면 작성하십시오 .
  2. 당신에 ~/.bashrc, 그 보장 ~/.local/binPATH그것은 ~/.local에 있습니다 PYTHONPATH.
  3. ~/.pydistutils.cfg포함 된 파일 만들기

    [install]
    prefix=~/.local
    

    표준 ConfigParser 형식 파일입니다.

  4. 다운로드 distribute_setup.py 하여 실행하십시오 python distribute_setup.py(아니요 sudo). 존재하지 않는 site-packages디렉토리 에 대해 불평하는 경우 수동으로 작성하십시오.

    mkdir -p ~ / .local / lib / python2.7 / site-packages /

  5. 실행 which easy_install중인지 확인하기 위해 실행~/.local/bin

  6. 운영 pip install virtualenv
  7. 운영 pip install virtualenvwrapper
  8. 폴더를 포함하는 가상 환경을 만듭니다 (예 : ~/.virtualenvs
  9. ~/.bashrc추가

    export WORKON_HOME
    source ~/.local/bin/virtualenvwrapper.sh
    

그것은 전혀 사용하지 않으며 sudo파이썬 환경은 ~/.localOS의 파이썬과 완전히 분리되어 있습니다. 면책 조항 : virtualenvwrapper이 시나리오에서 얼마나 호환되는지 확실 하지 않습니다-내 시스템에서 테스트 할 수 없었습니다 :-)


이 답변에 링크 된 여러 자습서에서 권장되는 단계 를 따르면 Walker 및 Vinay의 답변에서 다소 복잡한 "수동"단계없이 원하는 효과를 얻을 수 있습니다. Ubuntu를 사용하는 경우 :

sudo apt-get install python-pip python-dev

OS X에서 homebrew를 사용하여 Python을 설치하면 이에 해당합니다 (자세한 내용은 여기 참조 ).

brew install python

으로 pip설치, 당신은 (당신은 생략 할 수 있습니다 나머지 패키지를 얻을하는 데 사용할 수 있습니다 sudo로컬 파이썬 설치를 사용하는 등, OS X에서)를.

sudo pip install virtualenvwrapper

(이 패키지는 전 세계적으로 설치 해야하는 유일한 패키지이며 OS의 시스템 수준과 충돌 할 것이라고 의심됩니다. 안전을 원한다면 배포판 버전을 유지할 수 있습니다 sudo apt-get install virtualenvwrapper)

참고 : Ubuntu 14.04 에서는 pip install과 관련된 오류가 발생하여 파일 사용 pip3 install virtualenv virtualenvwrapper하고 추가 합니다.VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.bashrc/.zshrc

그런 다음 .bashrc파일에 추가 하십시오.

export WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh

그리고 그것을 소스

. ~/.bashrc

이것이 기본적으로입니다. 이제 유일한 결정은 시스템 레벨 패키지를 포함하도록 virtualenv를 작성할 것인지 여부입니다.

mkvirtualenv --system-site-packages foo

기존 시스템 패키지를 다시 설치할 필요가없는 경우 시스템 인터프리터 버전과 심볼릭 링크됩니다. 참고 : sudo 없이도 새 패키지를 설치하고 기존 포함 된 시스템 패키지를 업그레이드 할 수 있습니다. 테스트 한 결과 시스템 인터프리터가 중단되지 않고 작동합니다.

kermit@hocus-pocus:~$ sudo apt-get install python-pandas
kermit@hocus-pocus:~$ mkvirtualenv --system-site-packages s
(s)kermit@hocus-pocus:~$ pip install --upgrade pandas
(s)kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.10.1
(s)kermit@hocus-pocus:~$ deactivate
kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.8.0

완전히 분리 된 환경을 원한다면 대안은

mkvirtualenv --no-site-packages bar

또는 이것이 기본 옵션 인 경우 간단히

mkvirtualenv bar

결과적으로 즐겨 사용하는 패키지를 자유롭게 그리고 무의식적으로 설치할 수있는 새로운 virtualenv가 있습니다.

pip install flask

파이썬 3.4 이후

Python 3.3은 venv 모듈을 추가 하고 Python 3.4는 ensurepip 모듈을 추가합니다 . 이것은 부트 스트랩 핍을 다음과 같이 쉽게 만듭니다.

python -m ensurepip

venv가상 환경 내에서 호출해야 할 수도 있습니다.

보장 된 핍은 PEP 453에 설명되어 있습니다.


우분투에서 :

sudo apt-get install python-virtualenv

패키지 python-pip는 종속성이므로 설치됩니다.


직장에서 사용할 수 있도록이 절차를 만들었습니다.

cd ~
curl -s https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz | tar xvz
cd pip-1.3.1
python setup.py install --user
cd ~
rm -rf pip-1.3.1

$HOME/.local/bin/pip install --user --upgrade pip distribute virtualenvwrapper

# Might want these three in your .bashrc
export PATH=$PATH:$HOME/.local/bin
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS="--distribute"
source $HOME/.local/bin/virtualenvwrapper.sh

mkvirtualenv mypy
workon mypy
pip install --upgrade distribute
pip install pudb # Or whatever other nice package you might want.

보안을위한 요점 :

  1. curl은 SSL 유효성 검사를 수행합니다. wget하지 않습니다.
  2. pip 1.3.1부터 pip는 ssl 유효성 검사도 수행합니다.
  3. 더 적은 사용자가 github tarball보다 pypi tarball을 업로드 할 수 있습니다.

업데이트 : 2013 년 7 월 현재이 프로젝트는 더 이상 유지되지 않습니다. 저자는 pyenv 사용을 제안 합니다. (pyenv는 virtualenv를 기본적으로 지원하지 않지만 잘 작동합니다.)

Pythonbrew 는 Python의 버전 관리자이며 virtualenv를 지원합니다.

venvs를 사용하여 pythonbrew와 python-version을 설치하면 정말 쉽습니다.

# Initializes the virtualenv 
pythonbrew venv init

# Create a virtual/sandboxed environment 
pythonbrew venv create mycoolbundle  

# Use it 
pythonbrew venv use mycoolbundle

원하는 작업인지 확실하다면 sudo python setup.py install을 수행하는 데 아무런 문제가 없습니다.

차이점은 OS의 사이트 패키지 디렉토리를 .py 파일을 복사 할 대상으로 사용한다는 것입니다.

따라서 pip를 os OS에 액세스하려면 원하는 방법 일 것입니다. 나는 다른 방법이 나쁘다고 말하지는 않지만 이것은 아마도 공평 할 것입니다.


ActivePython을 설치하십시오 . pip, virtualenv 및 Distribute가 포함됩니다.


최근에 같은 문제가 발생했습니다. “항상 virtualenv 사용”사고 방식의 일부가되고 있으므로 내 문제는 글로벌 또는 사용자 사이트 패키지 디렉토리에 배포를 설치하지 않고 pip로 virtualenv를 설치하는 것이 었습니다. 이를 위해 배포, pip 및 virtualenv를 수동으로 다운로드하고 각각에 대해 "python setup.py install --prefix ~ / .local / python-private"(일시적인 PYTHONPATH = ~ / .local / python-private)을 사용하여 설치 스크립트가 배포를 찾을 수 있도록). virtualenv 스크립트를 PATH에있는 다른 디렉토리로 이동하고 sys.path에서 배포 및 virtualenv 모듈을 찾을 수 있도록 편집했습니다. Tada : / usr, / usr / local 또는 사용자 사이트 패키지 디렉토리에 아무것도 설치하지 않았지만 어디에서나 virtualenv를 실행할 수 있으며 해당 virtualenv에서 pip를 얻습니다.


이전 OS 제공 Python 버전 위에 virtualenv 내부에서도 업그레이드 된 SSL 모듈을 설치하는 데 여러 가지 문제 (아래 참조)가 있었으므로 이제는을 사용 pyenv합니다.

pyenv 를 사용하면 새로운 Python 버전을 매우 쉽게 설치할 수 있으며 virtualenvs를 지원합니다. 다른 답변에 나열된 virtualenv의 레시피보다 훨씬 쉽게 시작할 수 있습니다 .

  • Mac에서 입력 brew install pyenv하고 Linux에서 pyenv-installer를 사용하십시오.
  • 이를 통해 내장 된 virtualenv 지원 및 Python 버전 전환 (필요한 경우)
  • Python 2 또는 3과 잘 작동하며 한 번에 많은 버전을 설치할 수 있습니다

이것은 시스템 파이썬으로부터 "새로운 파이썬"버전과 virtualenv를 격리 시키는데 아주 효과적입니다. 최신 Python (2.7.9 이후)을 쉽게 사용할 수 있기 때문에 SSL 모듈은 이미 업그레이드되었으며 물론 최신 Python 서버 설정과 마찬가지로 시스템 Python 모듈과 분리되어 있습니다.

몇 가지 훌륭한 자습서 :

pyenv-virtualenv유형 - 플러그인은 이제 내장되어 pyenv commands | grep virtualenv확인합니다. 나는 pyenv-virtualenvwrapper 플러그인을 사용하지 않을 것입니다-pyenv에 더 통합 된 pyenv-virtualenv를 어떻게 사용하는지보십시오. 여기서 virtualenvwrapper 가하는 대부분의 작업을 다룹니다.

pyenvrbenv(루비 버전 전환을위한 좋은 툴)을 모델로 하고 있으며 유일한 의존성은 bash입니다.

  • pyenv는 비슷한 이름과 관련이 없습니다. pyvenv최근 Python 3 버전의 일부인 virtualenv에 해당하며 Python 버전 전환을 처리하지 않습니다.

경고

pyenv에 대한 두 가지 경고 :

  1. 그것은 bash 또는 유사한 쉘에서만 작동합니다-또는 더 구체적으로 pyenv-virtualenv 플러그인은 Ubuntu 또는 Debian에 dash있는을 좋아하지 않습니다 /bin/sh.
  2. Ansible과 같은bash --login 자동화 도구로는 항상 달성하기 쉽지 않은 대화식 로그인 쉘 (예 : 터미널 사용) 에서 실행해야합니다 .

따라서 pyenv는 대화식 사용에 적합하고 스크립팅 서버에는 적합하지 않습니다.

SSL 모듈 문제

사용하는 한 가지 이유 pyenv는 이전 시스템 제공 Python 버전을 사용할 때 Python SSL 모듈을 업그레이드 할 때 종종 문제가 있기 때문입니다.


  • 파이썬 자체에 아무것도 설치하지 않고도이 작업을 수행 할 수 있습니다.

  • sudo 나 권한이 필요하지 않습니다.

  • virtualenvtar 파일 의 최신 버전을 찾을 필요가 없습니다

  • 최신 정보를 유지하기 위해 bash 스크립트에서 버전 정보를 편집 할 필요가 없습니다.

  • 당신은 필요하지 않습니다 curl/ wget또는 tar설치하거나 pip또는easy_install

  • 이것은 2.7과 3.X에서 작동합니다.

다음을 저장하십시오 /tmp/initvenv.py:

에서 미래의 수입 print_function

import os, sys, shutil, tempfile, subprocess, tarfile, hashlib

try:
    from urllib2 import urlopen
except ImportError:
    from urllib.request import urlopen

tmp_dir = tempfile.mkdtemp(prefix='initvenv_')
try:
    # read the latest version from PyPI
    f = urlopen("https://pypi.python.org/pypi/virtualenv/")
    # retrieve the .tar.gz file
    tar_found = False
    url = None
    sha256 = None
    for line in f.read().splitlines():
        if isinstance(line, bytes):
            line = line.decode('utf-8')
        if tar_found:
            if 'sha256' in line:
                sha256 = line.split('data-clipboard-text')[1].split('"')[1]
                break
            continue
        if not tar_found and 'tar.gz">' not in line:
            continue
        tar_found = True
        for url in line.split('"'):
            if url.startswith('https'):
                break
    else:
        print('tar.gz not found')
        sys.exit(1)
    file_name = url.rsplit('/', 1)[1]
    print(file_name)
    os.chdir(tmp_dir)
    data = urlopen(url).read()
    data_sha256 = hashlib.sha256(data).hexdigest()
    if sha256 != data_sha256:
        print('sha256 not correct')
        print(sha256)
        print(data_sha256)
        sys.exit(1)
    with open(file_name, 'wb') as fp:
        fp.write(data)
    tar = tarfile.open(file_name)
    tar.extractall()
    tar.close()
    os.chdir(file_name.replace('.tar.gz', ''))
    print(subprocess.check_output([sys.executable, 'virtualenv.py'] +
                                  [sys.argv[1]]).decode('utf-8'), end='')
    if len(sys.argv) > 2:
        print(subprocess.check_output([
            os.path.join(sys.argv[1], 'bin', 'pip'), 'install', 'virtualenv'] +

            sys.argv[2:]).decode('utf-8'), end='')
except:
    raise
finally:
    shutil.rmtree(tmp_dir)  # always clean up

그것을 다음과 같이 사용하십시오

python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages]

예를 들어 ( distribute호환성 계층 이 정말로 필요한 경우 setuptools)

python /tmp/initvenv.py venv distribute

이전 버전의 파이썬에서는 InsecurePlatformWarnings¹를 줄 수 있습니다.

virtualenv가 있으면 (예 venv:) virtualenv방금 설치 한 것을 사용하여 다른 virtualenv를 설정할 수 있습니다 .

venv/bin/virtualenv venv2

virtualenvwrapper

한 번 설정 한 후에 virtualenvwrapper살펴 보는 것이 좋습니다 .

% /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper

및 활성화 (로그인 스크립트에서 수행 가능) :

% source venv/bin/virtualenvwrapper.sh

당신은 다음과 같은 일을 할 수 있습니다 :

% mktmpenv 
New python executable in tmp-17bdc3054a46b2b/bin/python
Installing setuptools, pip, wheel...done.
This is a temporary environment. It will be deleted when you run 'deactivate'.
(tmp-17bdc3054a46b2b)% 

¹ 경고를 표시하지 않는 방법을 찾지 못했습니다. 그것은 해결 될 수 pip및 / 또는 request하지만, 개발자는 원인으로 서로를 가리 킵니다. 필자는 사용하고 있던 파이썬 버전을 최신 버전으로 업그레이드하는 비현실적인 권장 사항을 얻었습니다. 나는 이것이 Linux Mint 17 설치와 같은 것을 깨뜨릴 것이라고 확신한다. 다행히도 pip패키지를 캐시하므로 패키지 설치 당 한 번만 경고가 표시됩니다.


Virtualenv 공식 사이트에 대한 유용한 지침이 있습니다. https://pypi.python.org/pypi/virtualenv

기본적으로 내가 한 일은 pipwith 로 설치 sudo easy_install pip한 다음 사용하여 sudo pip install virtualenv다음과 같은 환경을 만들었습니다. virtualenv my_env(원하는 이름을 지정하십시오) virtualenv --distribute my_env; 이는 설치 distributepip내 VIRTUALENV있다.

다시, virtualenv페이지 의 지시 사항을 따르십시오 .

루비에서 오는 번거 로움; P


다음은 virtualenvwrapper (update of this ) 를 설치하는 좋은 방법 입니다.

virtualenv-1.11.4 다운로드 ( 여기 에서 최신 버전을 찾을 수 있음 ), 압축 해제, 열기terminal

# Create a bootstrapenv and activate it:
$ cd ~
$ python <path to unzipped folder>/virtualenv.py bootstrapenv
$ source bootstrapenv/bin/activate

# Install virtualenvwrapper:
$ pip install virtualenvwrapper
$ mkdir -p ~/bootstrapenv/Envs

# append it to file `.bashrc`
$ vi ~/.bashrc
  source ~/bootstrapenv/bin/activate
  export WORKON_HOME=~/bootstrapenv/Envs
  source ~/bootstrapenv/bin/virtualenvwrapper.sh

# run it now.
$ source ~/.bashrc

이제는 ..etc를 사용할 수 있습니다 mkvirtualenv env1.lsvirtualenv

참고 : 다운로드 폴더에서 삭제 virtualenv-1.11.4하거나 삭제할 수 있습니다 virtualenv-1.11.4.zip.


좋은 소식은 python3.4를 설치 한 경우 pyvenv가 이미 설치되어 있다는 것입니다. 그래서 그냥

pyvenv project_dir
source project_dir/bin/activate
python --version   
python 3.4.*

이제이 가상 환경에서 pip를 사용하여이 프로젝트의 모듈을 설치할 수 있습니다.

이 가상 환경을 그대로 두십시오.

deactivate

참고 URL : https://stackoverflow.com/questions/4324558/whats-the-proper-way-to-install-pip-virtualenv-and-distribute-for-python

반응형