pypi UserWarning : 알 수없는 배포 옵션 : 'install_requires'


112

python setup.py installPyPI 패키지를 실행할 때 누구 든지이 경고가 발생합니까 ?

install_requires패키지에 필요한 것을 정의합니다. 많은 PyPI 패키지에이 옵션이 있습니다. 어떻게 "알 수없는 배포 옵션"이 될 수 있습니까?



@tripleee 아마도이 질문은 그 질문보다 일찍 질문되었습니다.
Tyler Long

질문 연령은 부차적 인 문제 이지만 어느 쪽이든 강한 의견이 없습니다. 중복 지명을 반대 방향으로 진행하려면 가시성을 위해 메타 스택 오버플로 질문을 생성하십시오 . 개인적으로 다른 질문의 대답은 더 직접적이고 집중적이기 때문에 더 많은 도움이되었습니다. 이러한 답변 중 어느 것도 받아들이지 않은 것 같으므로 실제로 변경할 수있는 요소입니다.
tripleee

1
@tripleee이 스레드를주의 깊게 읽으면 완벽한 답이 전혀 없다는 것을 알게 될 것입니다. 그래서 어떤 대답을 받아 들여야할지 모르겠습니다. 나 자신도 납득할 수없는 답을 선택하여 사람들을 오도하고 싶지 않다.
타일러 긴

답변:


89

python setup.pyinstall_requires를 지원하지 않는 distutils를 사용합니다. setuptools는 배포 (후속 자) 및 pip (둘 중 하나 사용)도 수행합니다. 하지만 실제로 사용해야합니다. 즉, easy_install명령 또는 pip install.

또 다른 방법은 setup.py의 setuptools에서 설정을 가져 오는 것입니다. 그러나 이것은 표준이 아니며 패키지를 사용하려는 모든 사람이 setuptools를 설치해야합니다.


3
I want to use를 사용 하고 확장 만 빌드하려는 경우 파일 pip을 어떻게 실행 setup.py합니까?
Fred Foo

11
당신이 실행할 수 있도록 경고, 당신의 코드를 포장에서 당신을 방지하지 않습니다 python setup.py sdist와 함께 설치 pip install resulting_package.tar.gz. 당신은 또한 사용할 수있는 pip install -e소스에서 직접 설치,하지만 난 항상 패키지 나 .. 직접 저장소에서 설치하는 것이 바람직
세바스찬 Blask

이것은 약간 엉망입니다. 항상 setuptools에서 먼저 설정을 가져 오거나, 그렇지 않으면 distutils로 이동하여 경고를받을 수 있습니다. 그러나 pypy에있는 경우 setuptools가 설명자를 제대로 닫지 않기 때문에 "너무 많은 열린 파일"로 끝날 수 있습니다 (데비안에서도 기본 ulimit -n 1024) : bugs.pypy.org/issue878
fiorix

1
내 대답을 참조하십시오-내가 말할 수있는 한 이것은 setuptools의 버그 일뿐입니다. 사용자가 잘못한 것이 아니라 setuptools입니다.
ncoghlan 2013-07-02

이것은 내 질문에 간접적으로 대답합니다 pip install pendulum==1.4.4. 실행 결과로 오류가 발생했습니다 . 실행 pip install setuptools --upgrade하면 오류가 해결되었습니다.
계정을

32

이것은 내 Google 검색의 첫 번째 결과 였지만 대답이 없었습니다. setuptools를 업그레이드하면 문제가 해결되었음을 알았습니다 (그리고 좋은 측정을 위해 pip).

pip install --upgrade pip
pip install --upgrade setuptools

이것이 다음 사람이이 링크를 찾는 데 도움이되기를 바랍니다.


이것은 나에게도 해결되었습니다. (파이썬 3.4에 노력 pip3 install neovim-remote.)
마이클 세틸

이것은 나를 위해 일했습니다. Python 2.7.16에 mako를 설치하려고했습니다. 유사한 알 수없는 배포 옵션이 있습니다. Pip은 괜찮 았지만 setuptools는 40.6.2에서 41.0.1로 이동했습니다. 그런 다음 Mako는 A-OK를 설치했습니다.
Max Yaffe

18

주의 ! 주의 ! 앞의 불완전한 대답. 파이썬 세계의 패키징 상태에 대한 "최신 메모"를 얻으려면 이 매우 상세한 에세이를 읽으십시오 .

ansible을 빌드 / 설치하려고 할 때이 문제가 발생했습니다. 문제는 distutils가 실제로 install_requires를 지원하지 않는 것 같습니다 . Setuptools 즉시 distutils를 원숭이 패치 해야 하지만 그렇지 않은 이유는 아마도 마지막 setuptools 릴리스가 2009 년의 0.6c11 인 반면 distutils는 핵심 Python 프로젝트이기 때문입니다.

따라서 setuptools-0.6c11-py2.7.egg를 수동으로 설치 한 후에도 setup.py를 실행하면 distutils dist.py 만 선택하고 site-packages / setuptools /의 파일은 선택하지 않습니다.

또한 setuptools 문서는 distutils가 아닌 ez_setup 사용에 대한 힌트를 제공 합니다.

그러나 setuptools 자체는 현재 배포판에서 제공되며 setup ()의 풍미는 install_requires를 지원합니다.


1
이 답변에는 다른 것들이 무엇인지에 대한 잘못된 정보와 혼란이 포함되어 있기 때문에 반대 투표를 받았습니다. 예를 들어 ez_setup.py는 setuptools 용 부트 스트랩 설치 프로그램이며 distutils "대신"을 사용하는 것이 아닙니다. 대부분의 PyPI 패키지는 "단순히 잘못된"것이 아닙니다.
Iguananaut

1
@Iguananaut, 답변을 검토해 주셔서 감사합니다. 나는 그것을 편집했다.
PAStheLoD

아, 고마워. 이 경우에 다시 찬성 할 것입니다. :) 당신이 연결 한 Nick Coghlan의 에세이는 제가 동료들에게이 일에 대해 고개를 감싸도록하기 전에 공유했던 에세이입니다.
Iguananaut

2013 년 3 월의 상황에 대한 훌륭한 에세이. 한 가지 질문 ... 저자는 " setuptoolsdistribute프로젝트가 다시 합병되는 과정에 있지만 합병은 아직 완료되지 않았습니다 (곧이 에세이를 업데이트하겠습니다. 그 변화). " 2019 년 현재까지의 상황을 아는 사람이 있습니까? Python 2.7의 수명 종료 날짜가 빠르게 다가옴에 따라 많은 Python 패키지가 업데이트 및 재 패키징 과정에있을 것입니다.
TrinitronX

16

저는 Python 2.7.11이 설치된 Mac을 사용하고 있습니다. 저는 매우 간단하고 간단한 프로젝트를 만드는 데 노력해 왔습니다. 여기서 유일한 요구 사항 은를 실행할 수 있고 이상적으로는 distutils에서 setup 명령 python setup.py installsetup.py사용할 수 있다는 것 입니다. kwargs 외에 setup()내가 여기서 언급 한 것 외에 다른 수입품이나 코드는 말 그대로 없습니다 .

setup.py파일에 대한 가져 오기가 다음과 같을 때 오류가 발생합니다 .

from distutils.core import setup

이것을 사용하면 다음과 같은 경고가 표시됩니다.

/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267 : UserWarning : 알 수없는 배포 옵션 : 'entry_points'warnings.warn ( 메시지)

가져 오기 ( 다른 것은 없음 )를 다음으로 변경하면 :

from distutils.core import setup
import setuptools  # noqa

경고가 사라집니다.

내가 사용하지 않는 오전 참고 setuptools그냥 가져 가 더 이상 경고를 방출하도록 동작을 변경하지 않습니다. 나에게 이것은 내가 사용하는 일부 프로젝트가 그러한 경고를 제공하고 다른 일부는 그렇지 않은 진정한 당황스러운 차이의 원인입니다.

분명히 어떤 형태의 원숭이 패치가 진행되고 있으며 가져 오기가 수행되었는지 여부에 따라 영향을받습니다. 이것은 아마도이 문제를 연구하는 모든 사람들에게 해당되는 상황은 아니지만 제가 일하고있는 좁은 환경에서 제가 찾던 답입니다.


이것은 distutils가 setuptools를 몽키 패치해야하며 Ansible을 설치할 때 문제가 있다고 말하는 다른 (커뮤니티) 의견과 일치합니다. Ansible은 과거에 setuptools없이 설치를 허용하려고 시도한 것 같습니다.

https://github.com/ansible/ansible/blob/devel/setup.py

많은 것들이 공중에 있습니다 ...하지만 간단한 프로젝트에 대한 간단한 답을 찾고 있다면 setuptools 만 가져와야합니다.


1
추가하면 import setuptools파이썬 3.5를 사용하는 우분투 16.04에서 기적적으로 문제가 해결되었습니다.
kuropan 19.01.24

8

이것은 distutils의 경고이며 setuptools가 설치되어 있지 않다는 신호입니다. http://pypi.python.org/pypi/setuptools 에서 설치 하면 경고가 제거됩니다.


32
setuptools가 설치됩니다. 여전히 경고가 있습니다.
Tyler Long

당신 말이 맞아요. setuptools 나 배포판이 설치되어 있어도 파이썬 2.6.6에서이 오류가 발생합니다. 2.7.2로 시도하면 사라졌습니다.
Fredrik Hård 2011

4
파이썬 2.7.3에서이 문제가 발생했습니다
Calvin Cheng

2
이것은 나를 위해 그것을했다 : wget bootstrap.pypa.io/ez_setup.py -O-| sudo는 파이썬
radtek

나에게도 도움이 된 @radtek에게 감사드립니다. 아마도 당신의 의견을 답변으로 만들 수 있습니까?
Esteis

4
sudo apt-get install python-dev  # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

누락 된 헤더를 설치합니다. 내 문제가 해결되었습니다.


4

결론적으로 :

distutils지원하지 않습니다 install_requires또는 entry_points, setuptools않습니다.

변화 from distutils.core import setupsetup.pyfrom setuptools import setup귀하 또는 리팩토링 setup.py는 만 사용 distutils하고 있습니다.

나는 entry_points단지 setuptools기능 이라는 것을 깨닫지 못했기 때문에 여기에 왔습니다 .

나처럼 전환 setuptools하고 distutils싶다면 :

  1. 제거 install_requires에서 setup.py 그냥 사용 requirements.txt을 함께pip
  2. ( doc )로 변경 entry_points하고 shebangs 및 진입 점이있는 전체 스크립트 에 의존하는 모듈을 리팩터링합니다 .scriptsentry_points

권장 패키지가 무엇인지 이해하려고합니다. "distutils 기능 만 사용"과 "setuptools를 distutils로 변환"이라고 썼지 만 "entry_points는 setuptools 기능 일뿐"이라고 명시하고 있습니다. 약간 모순되는 것 같습니까?
chrisinmtown

2

내가 알 수있는 한, 이것은 표준 라이브러리의 기본 클래스를 호출하기 전에 setuptools 특정 옵션을 제거하지 않는 setuptools의 버그입니다. https://bitbucket.org/pypa/setuptools/issue/29 / avoid-userwarnings-emitted-calling

당신은 무조건이있는 경우 import setuptools귀하에 setup.py(같은 당신이해야 setuptools에 특정 옵션을 사용하는 경우), 다음 스크립트와 함께 실패하지 않는 사실은 ImportErrorsetuptools에 제대로 설치되어 있음을 나타냅니다.

다음과 같이 경고를 음소거 할 수 있습니다.

python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>

setuptools가 설치되지 않은 경우 완전히 실패하는 무조건 가져 오기를 사용하는 경우 에만이 작업을 수행하십시오. :)

(합병 후 setuptools 리포지토리의 체크 아웃에서 이와 동일한 동작을보고 있으므로 시스템 구성 문제가 아닌 setuptools 버그라고 확신합니다. 사전 병합 배포에 동일한 문제가있을 것으로 예상합니다)


0

이제 Python2.7을 사용하는 레거시 도구에서이를 확인했습니다. 여기서 Dockerfile과 같은 빌드는 고정되지 않은 종속성 (예 : pytest)을 설치합니다. PyTest는 Python 2.7 지원을 중단 했으므로 버전 <새 패키지 릴리스를 지정해야 할 수 있습니다.

또는 총알을 깨물고 실행 가능한 경우 해당 앱을 Python 3으로 변환하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.