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
'IT이야기' 카테고리의 다른 글
Ruby에서 "=~" 연산자 (0) | 2021.10.26 |
---|---|
Spring 3.0 MVC 바인딩 Enums 대소문자 구분 (0) | 2021.10.26 |
Python 하위 프로세스의 표준 입력 (0) | 2021.10.26 |
로그 눈금으로 눈금 설정 (0) | 2021.10.25 |
Sequelize.sync(), 특히 강제 옵션 작동 원리 (0) | 2021.10.25 |