이 작업을 수행하는 가장 좋은 방법은 setuptools
package_data
지시문 을 사용하는 것 입니다. 이것은 대신 setuptools
(또는 distribute
)을 사용한다는 것을 의미 distutils
하지만 이것은 매우 원활한 "업그레이드"입니다.
다음은 전체이지만 테스트되지 않은 예입니다.
from setuptools import setup, find_packages
setup(
name='your_project_name',
version='0.1',
description='A description.',
packages=find_packages(exclude=['ez_setup', 'tests', 'tests.*']),
package_data={'': ['license.txt']},
include_package_data=True,
install_requires=[],
)
여기서 중요한 특정 라인을 참고하십시오.
package_data={'': ['license.txt']},
include_package_data=True,
package_data
인 dict
패턴 목록에 패키지 이름 (빈 = 모든 패키지) (globs의를 포함 할 수 있습니다)의. 예를 들어, 패키지 내에 파일 만 지정하려면 다음을 수행하십시오.
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
여기서 해결책 은 확장자가 아닌 파일 이름을 바꾸지 않는 것 입니다.py
.py
자세한 내용은 Ian Bicking의 프레젠테이션 을 참조하십시오.
업데이트 : 다른 [더 나은] 접근 방식
소스 배포 ( sdist
) 의 내용을 제어 하고 패키지 외부에 파일이있는 경우 (예 : 최상위 디렉토리) MANIFEST.in
파일 을 추가하는 것이 효과적 입니다. 이 파일의 형식에 대해서는 Python 설명서 를 참조하십시오 .
이 응답을 작성한 이후, MANIFEST.in
소스 배포 ( tar.gz
)에 필요한 파일이 있는지 확인하는 것이 일반적으로 사용하는 것이 덜 실망스러운 방법 이라는 것을 알았습니다 .
예를 들어, requirements.txt
최상위에서 from 을 포함하려면 최상위 "data"디렉토리를 반복적으로 포함하십시오.
include requirements.txt
recursive-include data *
그럼에도 불구하고 설치시 이러한 파일을 사이트 패키지 내의 패키지 폴더에 복사하려면 기능 에 공급 include_package_data=True
해야합니다 setup()
. 자세한 내용은 비 코드 파일 추가 를 참조하십시오.