파이썬 프로젝트에 MANIFEST.in이 필요하며 그 안에 무엇이 있어야합니까?


120

"Python Distribute"가이드 (python-distribute.org에 있었지만 해당 등록이 만료 됨)는 doc/txt파일 을 포함하도록 지시 하며 .py파일은 파일에서 제외 MANIFEST.in됩니다.

sourcedist 문서는 나에게 단지 sdist 용도를 알려줍니다 MANIFEST.in만 지정하고 포함하는 파일이 포함 .py된 파일을. 또한 다음을 사용하라고 알려줍니다 : python setup.py sdist --manifest-only를 생성 MANIFEST하지만 파이썬은 이것이 존재하지 않는다고 말합니다.

나는 이것들이 다른 버전의 파이썬에서 왔고 배포 시스템이 완전히 엉망이 된 것에 감사하지만, 내가 파이썬 3을 사용하고 있다고 가정하고 setuptools(배포 도구만을 위해 더 이상 사용되지 않는 이전 설정 도구가 아니라 배포를 포함하지만 이제는 setuptools라고 불리는 새로운 배포로 다시 가져오고 setuptools로 이름이 바뀌 었습니다 .....)

'표준'폴더 구조와 setup.py파일을 따르고 있습니다.

  1. 내가 필요 MANIFEST.in합니까?
  2. 그 안에 무엇이 있어야합니까?
  3. 이러한 모든 패키지 시스템과 방법이 언제 하나의 간단한 프로세스로 만들어 질까요?

답변:


117

Re : "MANIFEST.in이 필요합니까?

아니요,을 (를) 사용할 필요는 없습니다 MANIFEST.in. 모두, distutilssetuptools소스 배포 패키지에 모두에 언급 된 파일을 포함하는 setup.py- 모듈, 패키지 파이썬 파일을, README.txt하고 test/test*.py. 이것이 배포 패키지에 포함하려는 모든 것이라면을 사용할 필요가 없습니다 MANIFEST.in.

포함 할 기본 파일을 조작 (추가 또는 제거)하려면을 사용해야 MANIFEST.in합니다.

Re : 그 안에 무엇이 있어야합니까?

절차는 간단합니다.

  1. 당신에 있는지 확인하십시오 setup.py당신이 (에 의해 포함 setup(... 모듈, 패키지, 스크립트) 인수) 프로그램이 실행하는 당신이 중요한 느끼는 모든 파일을

  2. 추가 할 파일이 있거나 제외 할 파일이 있는지 명확히합니다. 둘 다 필요하지 않으면을 사용할 필요가 없습니다 MANIFEST.in.

  3. 경우 MANIFEST.in필요, 그것을 만들 수 있습니다. 일반적으로, 당신은 거기에 추가 tests*/*.py, 파일 README.rst사용하지 않는 경우 README.txt, docs필요한 경우, 테스트 스위트에 대한 파일 가능성이 일부 데이터 파일을.

예를 들면 :

include README.rst
include COPYING.txt

테스트하려면을 실행 python setup.py sdist하고에서 만든 tarball을 검사하십시오 dist/.

이 모든 다른 패키지 시스템은 언제 ...

오늘과 2 년 전의 상황을 비교해 보면 (상황이 훨씬 setuptools나아졌습니다) 갈 길입니다. 당신은 사실을 무시할 수, distutils조금 깨진이며, 낮은 수준의 기지 setuptoolssetuptools당신에게서 이런 일을 숨기는 처리를 취하여야한다.

편집 : 내가 사용하는 마지막 몇 가지 프로젝트 pbr세 가지 라인 배포 패키지를 구축 setup.py하고있는 나머지 존재 setup.cfg하고 requirements.txt. MANIFEST.in다른 이상한 것들 에 대해 신경 쓸 필요가 없습니다 . 비록 패키지가 좀 더 많은 문서가 필요하더라도. 참조 http://docs.openstack.org/developer/pbr/를


1
내 제한된 경험에 따르면 파이썬 모듈 ( init .py가있는 dir) 내부에 파일을 포함 하려면 MANIFEST.in을 사용하고 sdist(means : source distribution ) 명령을 사용해야합니다 . 당신이 생각하는 경우 bdistbdist_wheel있는 바이너리 만 파이썬 경로에 설치하기위한 것, 이것은 의미가 있습니다. (이 모듈이 아닌 파일과 디렉토리는 어디로 /usr/local/lib/python2.7/dist-packages/갈까요 ?에 ? 당연히 아닙니다.) 그러나 생성 된 아카이브를보고 파일을 포함하지 않는 것은 혼란 스럽기 때문에 언급 할 가치가 있습니다.
Bruno Bronosky 2015 년

7
피할 떨어져 머리 package_datadata_files범위를 벗어나있는, 권고, 나는 계속됩니다. * .py 이름이 없기 때문에 건너 뛸 package_data패키지와 함께 설치되는 파일을 나열합니다 dist-packages/yourpackage. data_files패키지 외부에 설치되는 파일을 나열합니다. 각 항목 sys.prefix은 상대 경로 인 경우 접두어가 붙 거나 .txt로 시작하는 경우 직접 생성 (권한 허용) 하는 대상 경로를 지정 합니다 /.
Bruno Bronosky 2015 년

2
@JanVlcinsky 무엇인지 아는 것이 중요하며 [더 중요한 것은] 다른 배포 형식에 포함되지 않습니다 . 패키지 외부 (루트)에 boto.sample.cfg 파일 (가짜 AWS IAM 자격 증명 포함)을 포함하고 바이너리 배포에는이를 포함하지 않기 때문에 소스 배포를 통해서만 배포하는 퍼블릭 프로젝트가 있습니다. 나는 data_files = [( '/ etc /', [ 'boto.cfg'])]가있는 프로덕션에 배포하기위한 비공개 바이너리 빌드를 만듭니다. py가 아닌 파일을 배포하려면 이러한 작업이 어떻게 작동하는지 알아야합니다.
Bruno Bronosky 2015 년

2
@MichaelGoerz 솔직히 말하면 안됩니다. 이 대답은 오래된 것이며 제안 pbr하는 것도 나쁜 생각입니다.
Arne

1
@Ame 동의합니다. 현재 저는 대부분의 프로젝트를 pbr에서 시로
Jan Vlcinsky

7

이전 질문, 새로운 답변 :

아니요, 필요하지 않습니다 MANIFEST.in. 그러나 setuptools(일반적으로) 의미하는 바를 수행하려면 두 가지 주요 위치에서 setuptools_scm역할을 수행하는를 사용해야합니다 MANIFEST.in.

  • sdist명령을 실행할 때 모든 관련 파일이 패키지화되도록합니다 (여기서 모든 관련 파일은 "소스 제어하에있는 모든 파일"로 정의 됨).
  • include_package_data패키지 데이터를 build또는의 일부로 포함 하는 데 사용 하는 경우 bdist_wheel. (다시 말하지만, 소스 제어하에있는 파일)

에 대한 역사적 이해는 MANIFEST.in소스 제어 시스템이 없을 때 "소스 파일"과 "작업 디렉토리에있는 파일"을 구별하기위한 다른 메커니즘이 필요하다는 것입니다. 그러나 프로젝트가 소스 제어 (right ??)하에 있으므로 MANIFEST.in. 이 기사에서 더 많은 정보 .

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