IT이야기

python pip에 대한 설치 순서를 지정하는 방법

cyworld 2021. 10. 26. 19:27
반응형

python pip에 대한 설치 순서를 지정하는 방법은 무엇입니까?


저는 fabric(0.9.4)+pip(0.8.2)로 작업하고 있으며 여러 서버에 일부 Python 모듈을 설치해야 합니다. 모든 서버에는 pymongo 모듈용으로 업그레이드해야 하는 이전 버전의 setuptools(0.6c8)가 있습니다. Pymongo에는 setuptools>=0.6c9가 필요합니다.

내 문제는 pip가 pip를 중지시키는 setuptools 대신 pymongo로 설치를 시작한다는 것입니다. 요구 사항 파일에서 모듈 순서를 섞는 것이 도움이 되지 않는 것 같습니다.

요구사항.txt:

setuptools>=0.6c9
pymongo==1.9
simplejson==2.1.3

자체적으로 제대로 수행하지 않는 것처럼 보이므로 pip에 대한 설치 순서를 지정하는 방법이 있습니까?

이것은 두 개의 개별 요구 사항 파일로 해결할 수 있지만 현재 또는 미래에 여러 요구 사항 파일을 유지할 필요가 없다면 좋을 것입니다.

문제는 pip 0.8.3에서 지속됩니다.


이것은 어리석은 해킹이지만 효과가 있을 수 있습니다. 요구 사항 파일에서 한 줄씩 읽고 pip 명령을 실행하는 bash 스크립트를 작성하십시오.

#!/bin/bash
for line in $(cat requirements.txt)
do
  pip install $line -E /path/to/virtualenv
done

다음을 사용할 수 있습니다.

cat requirements.txt | xargs pip install

requirements.txt에서 모든 유형의 항목(예: git 저장소의 패키지)을 허용하려면 다음 명령 세트를 사용해야 합니다.

cat requirements.txt | xargs -n 1 -L 1 pip install

-n 1-L 1 옵션은 패키지를 하나씩 설치하고 requirements.txt 파일의 모든 줄을 별도의 항목으로 처리하는 데 필요합니다.


슬프게도 업그레이드 제안이 작동하지 않습니다. https://github.com/pypa/pip/issues/24 에서 다른 세부 정보를 읽으면 그 이유를 알 수 있습니다.

pip는 설치를 시도하기 전에 모든 패키지를 먼저 빌드합니다. 따라서 다음과 같은 요구 사항 파일을 사용하여

numpy==1.7.1
scipy==0.13.2
statsmodels==0.5.0

statsmodels 빌드는 다음 명령문과 함께 실패합니다.

ImportError: statsmodels requires numpy

요구 사항 파일의 각 항목에 대해 수동으로 pip를 호출하기 위해 제공된 해결 방법(셸 스크립트를 통해)이 유일한 현재 솔루션인 것 같습니다.


Pymongo는 setuptools>=0.6c9가 필요합니다.

어떻게 아세요? 빌드 또는 설치가 필요합니까? 설치하려고 했던 Pymongo의 버전을 말하지 않고 setup.py현재(3.2.2) 버전에 대한 파일을 보면 Pymongo가 실행하는 데 필요한 항목 setup.py( setup_requires)이나 설치하는 데 필요한 항목 ( )에 대한 사양이 없습니다 install_requires. 그러한 정보가 없으면 pip는 특정 버전의 setuptools를 보장할 수 없습니다. Pymongo가 실행하기 위해 특정 버전의 setuptools가 필요한 경우 setup.py( setup기능 자체 를 실행하기 위해 setuptools를 요구하는 것과는 대조적으로 ) 다른 문제는 최근까지 이를 지정할 방법이 없었다는 것입니다. 이제 사양이 있습니다 – PEP 518 – Python 프로젝트에 대한 최소 빌드 시스템 요구 사항 지정 , pip에서 곧 구현되어야 합니다 –PEP 518 지원 구현 #3691 .

설치 순서는 pip 6.1.0에서 수정되었습니다.

에서 PIP 설치 - 설치 주문 섹션 핍의 문서를 :

v6.1.0부터 pip는 종속 항목보다 먼저 종속 항목을 설치합니다(즉, "토폴로지 순서"). 이것은 현재 주문과 관련하여 pip이 만드는 유일한 약정입니다.

그리고 나중에:

v6.1.0 이전에는 pip가 설치 순서에 대해 약속하지 않았습니다.

그러나 Pymongo의 요구 사항을 적절하게 지정하지 않으면 도움이 되지 않습니다.


@lukasrms의 솔루션에 이어 - 한 번에 하나씩 요구 사항을 설치하기 위해 pip를 얻으려면 이것을해야했습니다.

cat requirements.txt | xargs -n 1 pip install

요구 사항 파일에 주석이 있는 경우 다음을 사용하고 싶을 것입니다.

grep -v "^#" requirements.txt | xargs pip install

I ended up running pip inside virtualenv instead of using "pip -E" because with -E pip could still see servers site-packages and that obviously messed up some of the installs.

I also had trouble with servers without virtualenvs. Even if I installed setuptools with separate pip command pymongo would refuse to be installed.

I resolved this by installing setuptools separately with easy_install as this seems to be problem between pip and setuptools.

snippets from fabfile.py:

env.activate = "source %s/bin/activate" % virtualenv_path

_virtualenv("easy_install -U setuptools")
_virtualenv("pip install -r requirements.txt")

def _virtualenv(command)
    if env.virtualenv:
        sudo(env.activate + "&&" + command)
    else:
        sudo(command)

I had these problems with pip 0.8.3 and 0.8.2.


Sorry, my first answer was wrong, because I had setuptools>=0.6c9.

It seems it is not possible because pymongo's setup.py needs setuptools>=0.6c9, but pip has only downloaded setuptools>=0.6c9, and not installed yet.

Someone discussed about it in the issue I pointed before.

I have my own created an issue some weeks ago about it: Do not run egg_info to each package in requirements list before installing the previous packages.

Sorry for the noisy.


First answer:

Upgrade your pip to 0.8.3 version, it has a bugfix to installation order.

Now if you upgrade everything works :-)

Check the news here: http://www.pip-installer.org/en/0.8.3/news.html

ReferenceURL : https://stackoverflow.com/questions/5394356/how-to-specify-install-order-for-python-pip

반응형